2011-02-23 129 views
0
private void button1_Click(object sender, EventArgs e) 
    { 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     string query = @"insert into Contacts (fname,lname,llnum,mobnum,e-mail,street,city,country) values (@fname,@lname,@llnum,@mobnum,@e-mail,@street,@city,@country)"; 
     cmd.CommandText = query;//@"insert into Contacts (fname,lname,llnum,mobnum,e-mail,street,city,country) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "')"; 
     OleDbParameter myParm = cmd.Parameters.Add("@fname", OleDbType.VarChar, 50); 
     myParm.Value = textBox1.Text; 
     myParm = cmd.Parameters.Add("@lname", OleDbType.VarChar, 50); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@mobnum", OleDbType.Integer, 12); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@e-mail", OleDbType.VarChar, 50); 
     myParm.Value = textBox2.Text; 
     myParm = cmd.Parameters.Add("@street", OleDbType.VarChar, 50); 
     myParm.Value = textBox6.Text; 
     myParm = cmd.Parameters.Add("@city", OleDbType.VarChar, 50); 
     myParm.Value = textBox7.Text; 
     myParm = cmd.Parameters.Add("@country", OleDbType.VarChar, 50); 
     myParm.Value = textBox8.Text; 

     cmd.Connection = myconn; 
     myconn.Open(); 
     cmd.ExecuteNonQuery(); 
     System.Windows.Forms.MessageBox.Show("User Account Succefully Created", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 
     myconn.Close(); 
    } 

這是我如何參數化字段,但我得到「無法將參數值從字符串轉換爲Int32。」錯誤如何參數化查詢?

+0

哦,上帝..從asp.net/forum代碼開始出現在計算器..這就是可悲 –

回答

1

您將所有值作爲「字符串」分配給參數,這是不正確的。 您已經聲明爲實例llnum參數,爲整數,這樣你分配給這個參數的值,應爲整數:

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
    myParm.Value = Convert.ToInt32(textBox2.Text); 
+0

是我現在已經改正了其必須在整數的兩個參數和運行程序,當我在輸入數據和按添加按鈕我得到INSERT INTO語句中的語法錯誤 – Beginner

+0

然後,在您的插入語句中出現錯誤。嘗試在每列設置[]。也許你的一列是保留字。 –

+0

「@ e-mail」是失敗的參數。將其重命名爲「@Email」,不帶引號。 –

0

好吧,如果你有一個指定類型OleDbType.Integer參數,必須提供一個整數的值!

什麼你設置這裏只是另一個字符串:

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
myParm.Value = textBox2.Text; 

你需要做這樣的事情:

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
myParm.Value = Convert.ToInt32(textBox2.Text); 

,然後你需要通過調試,一步一步,找出其中在您的代碼中發生錯誤 - 然後修復它。

1

其中您是否得到該錯誤?你有各種非文本參數,但你仍然只是想給他們文本參數值。

就我個人而言,我會自己進行解析,例如,

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
myParm.Value = int.Parse(textBox2.Text, ...); // Whatever options you want to use 

你有在文本上是如何轉換爲數據庫的參數,而不是依賴於數據庫供應商做你到底怎麼想的完全控制這樣的話 - 如果確實試圖在做所有,它可能不會。

(我也建議聲明不同的變量,而不是重複使用相同的一個不同的參數。)

0

你有你定義爲整數的兩個參數,但指定的字符串:

myParm = cmd.Parameters.Add("@llnum", OleDbType.Integer, 12); 
    myParm.Value = textBox2.Text; 
    myParm = cmd.Parameters.Add("@mobnum", OleDbType.Integer, 12); 
    myParm.Value = textBox2.Text; 

你應該首先將textBox2.Text的值轉換爲一個int然後賦值。

1

,如果你會使用更容易:

cmd.Parameters.Add("@llnum", OleDbType.Integer, 12).Value =Convert.ToInt32(textbox.text); 

商祺!

0

您應該使用Convert.ToInt32 將整數參數轉換爲整數,您應該對所有不是字符串的類型進行轉換。因爲TextBox.Text屬性是一個字符串值。