连接到C#中的SQL Server数据库的问题

问题描述:

我发现这篇文章的大部分代码在这里How to set SQL Server connection string?连接到C#中的SQL Server数据库的问题

这里就是我有,但:

SqlConnection conn = new SqlConnection(); 

conn.ConnectionString = "Data Source=(localdb)\\Instance;" + 
         "Initial Catalog=Database;" + 
         "User id=root;Password=pass;"; 

try 
{ 
    conn.Open(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" + 
             "VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn); 

try 
{ 
    conn.Close(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

很多以前的代码是给我的错误。有一次,我遇到了一个我无法连接到实例的错误。这是'\'的问题。它认识到它是一种逃避角色,所以我做了双倍'\'来摆脱这种情况,所以我不再有这个错误,所以不应该是问题。

我得到了关于错误的用户名和密码的错误。我正在使用SQL Server身份验证,我以前使用的代码是指定Windows身份验证。我再也没有那个错误了。

截至目前,代码一路执行,没有错误。当我检查数据库时(我正在使用SQL Server Management Studio),没有任何东西被插入到表中。我已经直接运行了Insert语句并且工作正常,所以我不确定问题在这里。此外,我正在使用VS 2013.

+1

不想过于苛刻,但是在开始这种编程之前,您是否阅读过任何ADO.NET教程?你手中有一个非常强大的工具,你应该试着了解它的工作原理,否则这些问题将会是一个反复出现的情况。 – Steve 2014-10-19 21:31:05

您没有执行查询。创建命令对象后补充一点:

myCommand.ExecuteNonQuery(); 

旁注:你还是有周围所有的代码try...catch,并且使用的连接和命令using块。这将确保无论发生什么事物都能正确关闭和处理对象:

try { 

    using (SqlConnection conn = new SqlConnection()) { 

    conn.ConnectionString = 
     "Data Source=(localdb)\\Instance;" + 
     "Initial Catalog=Database;" + 
     "User id=root;" + 
     "Password=pass;"; 

    conn.Open(); 

    using (SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" + 
             "VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn)) { 
     myCommand.ExecuteNonQuery(); 
    } 

    } 

} catch (Exception ex) { 
    Console.WriteLine(ex.ToString()); 
} 
+0

写'catch(Exception)'是一个坏习惯,你不应该启动新的程序员。至少,捕获你期望的特定异常(在这种情况下,'SqlException')。更好的是,如果你的程序没有处理异常的策略,不要让它崩溃。 – 2014-10-20 08:16:15

+0

@JeroenMostert:这是一个很好的观点,我正在考虑提及这一点,但保持它接近原始代码。无论如何,将错误消息写入控制台似乎是处理错误的临时措施。 – Guffa 2014-10-20 09:13:01

您没有使用SqlCommand.ExecuteNonQuery来使用insert-command。因此没有插入。

SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" + 
             "VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn); 
int inserted = myCommand.ExecuteNonQuery(); 

你也应该使用using语句来确保所有非托管资源被布置和连接变得更加的错误关闭。那么你不需要明确地使用conn.Close