簡體   English   中英

如何參數化查詢?

[英]how to parameterize for query?

 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”。 錯誤

您正在將所有值作為“字符串”分配給該參數,這是不正確的。 例如,您已將llnum參數聲明為整數,因此分配給該參數的值應為整數:

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

您從哪里得到該錯誤? 您有各種非文本參數,但是您仍在嘗試為它們提供文本參數值。

我個人將自己執行解析,例如

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

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

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

如果您將使用,則更加容易:

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

問候!

好吧,如果您有指定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);

然后你需要通過,一步一步地調試,找出其中你的代碼中出現錯誤-然后解決它。

您有兩個參數定義為Integer,但分配了一個字符串:

    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,然后分配它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM