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

时间:2014-10-19 21:04:20

标签: c# sql-server

我在这里找到了大部分代码How to set SQL Server connection string?的这篇文章。

这是我的所作所为:

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());
}

很多以前的代码都给了我错误。有一次,我收到一个错误,我无法连接到该实例。这是' \#39;的一个问题。它认为这是一个逃避角色,所以我做了双重的“#”;为了摆脱这种情况,所以我不再得到那个错误了,所以这不应该是问题所在。

我收到错误的用户名和密码错误。我使用的是SQL Server身份验证,我之前使用的代码是指定Windows身份验证。我再也没有收到这个错误了。

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

2 个答案:

答案 0 :(得分:2)

您根本没有使用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

答案 1 :(得分:1)

您没有执行查询。在创建命令对象后添加:

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());
}