C# 在C中连接到SQL Server数据库时出现的问题#
我在这里找到了这篇文章的大部分代码 以下是我的想法:C# 在C中连接到SQL Server数据库时出现的问题#,c#,sql-server,C#,Sql Server,我在这里找到了这篇文章的大部分代码 以下是我的想法: SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source=(localdb)\\Instance;" + "Initial Catalog=Database;" + "User id=root;Password=pass;"; try {
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身份验证。我再也不会犯那种错误了
到目前为止,代码一直执行,没有错误。但是,当我检查数据库时(我使用的是SQLServerManagementStudio),表中没有插入任何内容。我已经直接运行了Insert语句,它工作得很好,所以我不确定这里有什么问题。另外,我使用的是VS2013 您根本没有使用insert命令。因此,没有插入任何内容
SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" +
"VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn);
int inserted = myCommand.ExecuteNonQuery();
您还应该使用
using
-语句来确保所有非托管资源都已释放,即使出现错误,连接也会关闭。然后您不需要显式地使用conn.Close
。您没有执行查询。在创建命令对象后添加以下内容:
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());
}
我不想太苛刻,但在开始这种编程之前,您是否阅读过ADO.NET上的任何教程?你手中有一个非常强大的工具,你应该试着了解一下它是如何工作的,否则这类问题会反复出现。编写
catch(Exception)
是一个坏习惯,你不应该开始新的程序员。至少,捕获您期望的特定异常(在本例中为SqlException
)。更好的是,如果您的程序没有处理异常的策略,请不要这样做,让它崩溃。@Jeroenmoster:这是一个很好的观点,我正想提到这一点,但让它更接近原始代码。无论如何,将错误消息写入控制台似乎是处理错误的临时措施。