Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中连接到SQL Server数据库时出现的问题#_C#_Sql Server - Fatal编程技术网

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:这是一个很好的观点,我正想提到这一点,但让它更接近原始代码。无论如何,将错误消息写入控制台似乎是处理错误的临时措施。