0

有人可以告诉我为什么这不会将值添加到数据库中。表单运行良好,不返回任何错误。

    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection connection = new SqlConnection();
        SqlCommand command = new SqlCommand();

        connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Documents\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

        command.Parameters.AddWithValue("@userName", textBox1.Text);
        command.Parameters.AddWithValue("@passWord", textBox2.Text);
        command.CommandText = "INSERT INTO Setup (userName, password) VALUES(@userName, @passWord)";



        try
        {
            connection.Open();
            int rowsAffected = command.ExecuteNonQuery();

        }
        catch (Exception ex)
        {
            // handle exception
        }
        finally
        {
            connection.Close();
        }


    }

仅供参考:我是“新手”我的数据库称为 Setup。我手动添加了一个名为 myTable 的表,其中包含 2 列 userName 和另一个名为 password 的表,两者都设置为 nchar(50)

4

3 回答 3

6

您需要指定Table,而不是数据库(在连接字符串中使用)。为表名添加了模式前缀:

command.CommandText = "INSERT INTO dbo.myTable (userName, password) VALUES (@userName, @passWord)";

并添加:

command.Connection = connection;

将您的Command对象与连接对象相关联。

于 2012-04-27T18:29:23.083 回答
1

您的代码应如下所示:

  • 设置连接对象。
  • 指定@LarsTech 提到的表名。
  • 在指定表名时最好使用两部分表示法,例如[Schema name].[Table Name]. 所以,你必须指定你的表名,比如dbo.MyTable

代码片段

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection connection = new SqlConnection();
    connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Documents\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");

    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    command.CommandText = "INSERT INTO dbo.MyTable  (userName, password) VALUES (@userName, @passWord)";
    command.Parameters.AddWithValue("@userName", textBox1.Text);
    command.Parameters.AddWithValue("@passWord", textBox2.Text);

    try
    {
        connection.Open();
        int rowsAffected = command.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        //handle exception
    }
    finally
    {
        connection.Close();
    }
}
于 2012-04-27T18:46:45.820 回答
1

表单运行良好,不返回任何错误。

那可能是因为你正在吞食它们。摆脱(或记录)您的catch (Exception ex).

一般来说,.NET BCL 是经过精心设计的——如果一个方法不起作用,你会得到一个异常。

[现在] 我有错误“ExecuteNonQuery:连接属性尚未初始化。”

正确的。您需要将 传递SqlConnectionSqlCommand

SqlCommand command = new SqlCommand();
command.Connection = connection;
于 2012-04-27T18:37:05.647 回答