请问为什么C#连接SQL失败

dzone12345 2018-11-09 03:27:14
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace sql_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string strConnection = "Server= (local);";

strConnection += "initial catalog= test;";

strConnection += "user id= tongfang-PC\tongfang;";

strConnection += "password=******;";

strConnection += "Connect Timeout=5";



bool CanConnectDB = false;

using (SqlConnection objConnection = new SqlConnection(strConnection))
{

try
{

objConnection.Open();

CanConnectDB = true;

objConnection.Close();

}

catch { }

if (CanConnectDB) MessageBox.Show("数据库连接成功!", "提示:");

else MessageBox.Show("数据库连接失败!", "提示:");

}
}
}
}

以上是代码,请问为什么总是提示,数据库连接失败!
...全文
113 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21717439 2018-11-13
  • 打赏
  • 举报
回复
vs工具里有个连接到数据库,测试连接成功后,点高级里面最下面有正确的连接字符串,你可以copy出来和你自己的对比下
牧歌ing 2018-11-13
  • 打赏
  • 举报
回复
catch (Exception ex)
{断点放这 自己调一下
}
kusirp21 2018-11-13
  • 打赏
  • 举报
回复
我也没看明白,从userid上来看应该是windows信任连接,但从整个连接字符串上来看却是网络连接方式。这到底是想用哪个方式连接?

建议楼主补充一下sql server知识:

1)什么是windows信任连接,什么是网络连接?两者连接字符串的规范是什么。
至少windows信任连接你还却一个Trusted_Connection的选项。
2)sql server实例是否启用了网络连接方式(这个需求要数据库中打开的)
3)针对网络连接方式协议是否正确?

windows登陆方式:
Server=sqlserver服务地址;UserID=windows用户名;Database=数据库;Trusted_Connection=Yes;Connect Timeout=90
sql 登陆方式:
Server=sqlserver服务地址;uid=数据库登陆名;pwd=用户名密码;database=数据库

windows用户名是类似于 machinename\windowsusername 这种形式
sql 登陆方式中数据库登陆名(其实与用户还有差别)在数据库中可以看到,也可以新键,到某个库之后这个登陆名会与用户名绑定,比如sa(存在一个sa的登陆名,在基础库中也存在sa用户。登陆数据之后sa 登陆名与sa用户绑定)。

但sql登陆方式中要求sql必须户开sql登陆方式,否则无法登陆。而且要求协议必须正确,保证这两项一般都可以登陆了!
  • 打赏
  • 举报
回复
.net 异常捕获机制,当代码抛出异常时,会一直向上抛出。那么应用程序的表现层捕获到它,给用户一个反馈(例如提示框),这都是正常的 Relase 版本中的处理逻辑。 但是调试开发阶段则不是这样的。这就好像工程卖出一个发动机,跟工厂里研发发动机,是两个不同的思想体系和工作流程。你按照发布版本才有的思路来写 try.....catch......代码,并且甚至是写到了程序的比较低级的层次的代码上,这就说明没人教你如何进行大的产品的开发。
  • 打赏
  • 举报
回复
高层程序通常是这样
#if DEBUG
    abc();
#else
    try
    {
        abc();
    }
    catch (Exception ex)
    {
        ........
    }
#endif
或者直接在 AppDomain.CurrentDomain.UnhandledException 以及 应用程序、窗体、页面、站点、Global.asax 等等层面去全局捕获异常。其实越是在低级的代码层面写 try......catch....... 代码,越是说明你是自学编程的。
  • 打赏
  • 举报
回复
只有 Release (发布出去的)版本才应该 Catch,而你开发调试以及测试时自然是越早让 bug 跳出来越好,只有捕获了异常你才知道下一步该干什么事情,会用 vs 调试器调试抛出异常的那行代码是最基本的开发知识。把异常屏蔽了,纯粹是自欺欺人。不是搞开发。
一只鬼 2018-11-13
  • 打赏
  • 举报
回复
catch{},错误都在这里嘛,你干嘛去掉
良朋 2018-11-10
  • 打赏
  • 举报
回复
哈哈,写个catch欺骗自己
代码-小二 2018-11-09
  • 打赏
  • 举报
回复
我觉得应该是你的连接字符串有问题,首先确定tongfang-PC\tongfang这个账号是否能够登陆,账号这一块的话,新手容易把Windows身份验证和SQL server验证搞混,首先用tongfang-PC\tongfang这个账号和密码在数据库手动登陆,看是否能够登陆成功,如果能登陆成功,可以设置断点看哪一步没有执行。
吉普赛的歌 2018-11-09
  • 打赏
  • 举报
回复
最好是用VS获取连接串, 不要自己瞎蒙。 https://blog.csdn.net/yenange/article/details/77026214
大鱼> 2018-11-09
  • 打赏
  • 举报
回复
tongfang-PC\tongfang;这个是你的数据库用户名吗?有那么操蛋的用户名么?还有你的数据库连接这段代码看着蛋疼
大鱼> 2018-11-09
  • 打赏
  • 举报
回复
我也跟一个:写个catch欺骗自己
正怒月神 2018-11-09
  • 打赏
  • 举报
回复
写个catch欺骗自己
  • 打赏
  • 举报
回复
写个catch欺骗自己
loveljy_19901114 2018-11-09
  • 打赏
  • 举报
回复
引用 3 楼 God_Girl 的回复:
你直接把异常抛出来看啊 , catch里面 你写空做毛啊。。。。
就是
  • 打赏
  • 举报
回复
你直接把异常抛出来看啊 , catch里面 你写空做毛啊。。。。
ManBOyyy 2018-11-09
  • 打赏
  • 举报
回复
public static int ExecuteSql(string SQLString) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand(SQLString, connection)) { try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.SqlClient.SqlException e) { connection.Close(); throw e; } } } } 用 这个抛出异常就知道你出现什么问题了
dzone12345 2018-11-09
  • 打赏
  • 举报
回复
我用SQL2008新建了数据库 test

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧