如何在asp.net中解决ExecuteNonQuery()中的错误

时间:2017-08-19 18:38:45

标签: c# asp.net sql-server ado.net

错误:

  

System.Data.dll中出现'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理

     

附加信息:列名或提供的值数与表定义不匹配。

代码:

SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = C:\Users\Harry\Documents\Visual Studio 2015\WebSites\WebSite2\App_Data\Database.mdf; Integrated Security = True";
con.Open();

// insert command 
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText="INSERT INTO firsttb VALUES ( @n , @p ) ";
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddWithValue("@n",TextBox1.Text);
cmd.Parameters.AddWithValue("@p", TextBox2.Text);

cmd.ExecuteNonQuery();

con.Close();

2 个答案:

答案 0 :(得分:0)

明确提到列名,如下所示;假设列名称为np。另外,使用Add()方法的重载而不是AddWithValue()

cmd.CommandText="INSERT INTO firsttb(n, p) VALUES ( @n , @p )";

答案 1 :(得分:0)

  1. 检查firsttb表中的列数。它应与您通过ado.net代码传递的许多值相匹配。

    E.g如果你的firsttb表有三列,那么在Insert Into语句中传递三个值。

  2. 此外,请检查您传递的值的顺序。正如您在Insert Into Statement中没有提到列名。因此,您传递的值的顺序非常重要。

  3. 试试这个:因为你的表有3列,你只传递两个值,在这种情况下,将你的Id列作为标识列,这样每次你插入一个新记录时,新的id将自动生成,你不​​要#39; t必须修改代码。

    // Identity Column
    CREATE TABLE Persons 
    (
        ID int IDENTITY(1,1) PRIMARY KEY,
        Username varchar(255) NOT NULL,
        Password varchar(255) NOT NULL
    );