我想将数据插入数据库。
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;
}
答案 0 :(得分:4)
查看您的插入声明:
"Insert into Users(... pic,passwords) values (... '"+password+"',@pic)";
您似乎已互换pic
和passwords
。
此外,正如其他人已在评论中指出的那样,您应该只使用参数化查询(以防止SQL注入),尤其是在处理用户或任何其他不受信任的来源插入的文本时。
答案 1 :(得分:0)
您的代码中存在逻辑错误。交汇处
'"+password+"',@pic)";
在你的字符串中。 顺便提一下!最好使用'linq to Sql'而不是查询传递方法!因为'Linq to Sql'为你做了一切。你只需要给出值:)