2017-08-19 64 views
-1

錯誤:如何的ExecuteNonQuery()在asp.net解決錯誤

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: Column name or number of supplied values does not match table definition.

代碼:

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

當使用INSERT INTO

VALUES'時,您必須爲所有列提供數據。或者,如果插入到特定的表格列中,則需要指定插入數據的列。 'INSERT INTO
(columnName1,columnName2,... etc)VALUES(value1,value2,... etc)' – Nkosi

+0

id也有,但主鍵和我只有2個文本框一個名稱和另一個密碼,所以應該怎麼做我做? –

回答

0

提列名明確如下圖所示;假設列名是np。此外,使用Add()方法的重載而AddWithValue()

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

身份證也存在,但主鍵和我只有2個文本框一個名稱和另一個密碼,所以我該怎麼辦? –

0
  1. 檢查firsttb表中的列數。它應該與你通過ado.net代碼傳遞的許多值匹配。

    E.g如果您的firsttb表有三列,則在Insert Into語句中傳遞三個值。

  2. 此外,請檢查您傳遞的值的順序。因爲您在「插入到聲明」中沒有提及列名稱。因此,你所傳遞的價值秩序非常重要。

試試這個:作爲你的表有3列,你只有經過兩個值,在這種情況下,讓你的ID列標識列,這樣你每次將插入一個新的記錄新的ID將獲得汽車生成,你不​​必修改代碼。

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

ID也有,但主鍵,我只有2個文本框一個名稱和另一個密碼,所以我該怎麼辦 –

+0

ID是唯一主鍵還是標識列也? – jANVI

+0

如果你的主鍵列不是標識列,那麼你也必須傳遞它的值。意味着總共 – jANVI