2017-06-29 146 views
-7

這是我c#項目中的錯誤。c異常處理sql異常#

類型「System.Data.SqlClient.SqlException」的未處理的異常出現在system.data.dll

其他信息:列名或提供值的數目不匹配表定義。在數據庫

CREATE TABLE [dbo].[form5_table] (
[registration_No] NVARCHAR (10) NOT NULL, 
[dateOfRegistration] DATE   NOT NULL, 
[nameWithInitials] NVARCHAR (50) NOT NULL, 
[fullName]   NVARCHAR (50) NOT NULL, 
[address]   NVARCHAR (50) NOT NULL, 
[telNo]    NVARCHAR (10) NULL, 
[dateOfBirth]  DATE   NOT NULL, 
[gender]    NVARCHAR (10) NOT NULL, 
[nic]    NVARCHAR (10) NOT NULL, 
[policeArea]   NVARCHAR (50) NOT NULL, 
PRIMARY KEY CLUSTERED ([registration_No] ASC) 

),用於Form5

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace HMS_esoft 
{ 
public partial class Form5 : Form 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\iyesha\Desktop\hms_esoft\HMS_esoft\HMS_esoft\Database1.mdf;Integrated Security=True"); 
    public Form5() 
    { 
     InitializeComponent(); 
    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void btnsubmit_Click(object sender, EventArgs e) 
    { 
     con.Open(); 
     SqlCommand cmd = con.CreateCommand(); 
     cmd.CommandType = CommandType.Text; 

     cmd.CommandText = "insert into Form5_table values('" + txtregno.Text + "','" + dateandtime.Text + "','" + txtname.Text + "','" + txtfullname.Text + "','" + txtaddress.Text + "','" + txttelno.Text + "','" + cmbyear.Text + "','" + cmbmonth.Text + "','" + cmbday.Text + "','" + grpbxgender.Text + "','" + txtnic.Text + "','" + txtpolicearea.Text + "')"; 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     MessageBox.Show("You registered Successfully..", "Submition Complete", MessageBoxButtons.OK, MessageBoxIcon.None); 


    } 

    private void btnreset_Click(object sender, EventArgs e) 
    { 
     txtfullname.Text = " "; 
     txtname.Text = " "; 
     txtaddress.Text = " "; 
     txttelno.Text = " "; 
     txtnic.Text = " "; 
     txtpolicearea.Text = " "; 
     cmbday.Text = " "; 
     cmbmonth.Text = " "; 
     cmbyear.Text = " "; 
     txtregno.Text = " "; 
     rbtnfemale.Checked = false; 
     rbtnmale.Checked = false; 


    } 

    private void btnback_Click(object sender, EventArgs e) 
    { 
     Form3 b = new Form3(); 
     b.Show(); 
     this.Hide(); 
    } 

    /*try 
    { 
     dt = registerOutPatient.hms; 
     dr = dt.NewRow(); 
     dr["Registration_No"] = txtregno.Text; 
     dr["Registration_Date"] = dateandtime.Text; 
     dr["Name_with_Initials"] = txtname.Text; 
     dr["Full_Name"] = txtfullname.Text; 
     dr["Address"] = txtaddress.Text; 
     dr["Tel_No"] = txttelno.Text; 
     dr["Date_of_Birth"] = grpbxdob.Text; 
     if (rbtnmale.Checked) 
     { 
      dr["Gender"] = "Male"; 
     } 
     else if (rbtnfemale.Checked) 
     { 
      dr["Gender"] = "Female"; 
     } 
     dr["NIC"] = txtnic.Text; 
     dr["Police_area"] = txtpolicearea.Text; 

    } 

    catch 
{ 

    MessageBox.Show("order id is already there"); 
    txtregno.Clear(); 
    txtregno.Focus(); 

}*/ 


} 

}

Form5_table創建

代碼

代碼;

你能解決這個問題嗎?

+8

錯誤信息似乎很清楚 – Izzy

+3

你絕對應該瞭解「SQL注入」的安全問題。這種構建SQL查詢的方式對於安全性和健壯性問題都很糟糕。 – AFract

回答

1

錯誤信息非常清楚。表中的字段數和您傳遞的參數數不匹配。

如果是這樣,我懷疑​​是自動生成列,你應該跳過插入查詢。

順便說一句,您的代碼容易受到SQL注入攻擊。考慮使用參數化查詢。

1

如果您提供的值與您表中的所有字段不匹配,您還應該傳遞要分配值的字段。無論如何,這是一種最佳做法,就像您在表格中創建新字段一樣,您正在向代碼中引入重大更改。

例如,通過對現場ID和ID1提供價值創造的紀錄:

INSERT INTO Form5_table ([Id] ,[Id1]) VALUES (5,10) 

你應該更好地提供SQL參數爲你的榜樣或者是SQL注入或壞逃逸:-)開放

0

如果指定列名稱,問題可以解決。謹防自動增量列。

0

對於DateOfBirth,您有3個不同的組合框。但在數據庫中,您只有一列。您應該獲取這些值並將其格式化爲1個有效的日期時間字符串,並將其用於插入。

例如,

private void btnsubmit_Click(object sender, EventArgs e) 
{ 
    con.Open(); 
    SqlCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 

    cmd.CommandText = "insert into Form5_table values('" + txtregno.Text + "','" + dateandtime.Text + "','" + txtname.Text + "','" + txtfullname.Text + "','" + txtaddress.Text + "','" + txttelno.Text + "','" + string.Format("{0}/{1}/{2}",cmbday.Text, cmbmonth.Text, cmbyear.Text) + "','" + grpbxgender.Text + "','" + txtnic.Text + "','" + txtpolicearea.Text + "')"; 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
    MessageBox.Show("You registered Successfully..", "Submition Complete", MessageBoxButtons.OK, MessageBoxIcon.None); 


}