我想将数据插入数据库

时间:2013-08-19 06:42:55

标签: c#

我想将数据插入数据库。

string pa = "4898";  
string equery="Insert into Users(pas)values('"+pa+"')";

当我将数据插入数据库时​​,它表示字符串或二进制数据将被截断,语句已被终止。所以我在表格中将nvarchar(50)更改为nvarchar(max)

这些语句已经执行并保存在不可读格式的数据库中,如傉䝎਍ਚ这个。如何解决这个问题并将数据保存在数据库中为“4898”。

private void save_Click(object sender, EventArgs e)
{
    string password = "4898";
    string equery="Insert into Users(name,gender,dateofbirth,age,fathername,
                                      address,citiy,state,country,zipcode,
                                      mobile,phone,email,jobtitle,
                                      dateofjoin,pic,passwords)
                             values('"+nametxt.Text.ToString().Trim()+"',
                                     @gender,
                                     '"+dateofbirth.Text.ToString().Trim()+"',
                                     '"+age.Value.ToString().Trim()+"',
                                     '"+fathertxt.Text.ToString().Trim()+"',
                                    '"+addresstxt.Text.ToString().Trim()+"',
                                  '"+citiytxt.Text.ToString().Trim()+"',
                                  '"+statetxt.Text.ToString().Trim()+"',
                                  '"+country.Text.ToString().Trim()+"',
                                  '"+ziptxt.Text.ToString().Trim()+"',
                                  '"+mobiletxt.Text.ToString().Trim()+"',
                                  '"+phonetxt.Text.ToString().Trim()+"',
                                  '"+emailtxt.Text.ToString().Trim()+"',
                                  '"+jobtxt.Text.ToString().Trim()+
                                  "','"+dateofjoin.Text.ToString().Trim()+"',
                                  '"+password+"',@pic)";
    SqlCommand cmd = new SqlCommand(equery, con);

    if(male.Checked)
        cmd.Parameters.AddWithValue("@gender","Male");
    else
        cmd.Parameters.AddWithValue("@gender","Female");

    MemoryStream stream = new MemoryStream();
    pictureBox1.Image.Save(stream,System.Drawing.Imaging.ImageFormat.Png);
    byte[] pic = stream.ToArray();
    cmd.Parameters.AddWithValue("@pic", pic);

    try
    {
        con.Open();
        cmd.ExecuteNonQuery();
        MessageBox.Show("Saved Successfully");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        con.Close();
    }

    MessageBox.Show("Saved Successfully");
    idtxt.Text = "";
    nametxt.Text = "";
    age.Value = Convert.ToDecimal(null);
    male.Checked = false;
    female.Checked = false;
    dateofbirth.Text = "";
    fathertxt.Text = "";
    addresstxt.Text = "";
    citiytxt.Text = "";
    statetxt.Text = "";
    country.Text = "";
    ziptxt.Text = "";
    mobiletxt.Text = "";
    phonetxt.Text = "";
    emailtxt.Text = "";
    dateofjoin.Text = "";
    jobtxt.Text = "";
    pictureBox1.Image = null;
}

2 个答案:

答案 0 :(得分:4)

查看您的插入声明:

"Insert into Users(... pic,passwords) values (... '"+password+"',@pic)";

您似乎已互换picpasswords


此外,正如其他人已在评论中指出的那样,您应该只使用参数化查询(以防止SQL注入),尤其是在处理用户或任何其他不受信任的来源插入的文本时。

答案 1 :(得分:0)

您的代码中存在逻辑错误。交汇处

'"+password+"',@pic)";

在你的字符串中。 顺便提一下!最好使用'linq to Sql'而不是查询传递方法!因为'Linq to Sql'为你做了一切。你只需要给出值:)