C# 字符串或二进制数据将被截断,插入SQL Server表
当我尝试插入到表中时,这是一个运行时异常,在我添加更新函数之前,它是有效的C# 字符串或二进制数据将被截断,插入SQL Server表,c#,sql-server,C#,Sql Server,当我尝试插入到表中时,这是一个运行时异常,在我添加更新函数之前,它是有效的 private void button1_Click(object sender, EventArgs e) { Random rndID = new Random(); int id = rndID.Next(100, 1000); SqlConnection connection = new SqlConnection(@"Data Source=DE
private void button1_Click(object sender, EventArgs e)
{
Random rndID = new Random();
int id = rndID.Next(100, 1000);
SqlConnection connection = new SqlConnection(@"Data Source=DESKTOP-IOHHC7K\SQLEXPRESS;Initial Catalog=CityAppDB;Integrated Security=True");
SqlCommand command = new SqlCommand("insert into UsersTB(User_ID, Full_Name, Email_Address, Phone_Number, Password)
values('" + id.ToString() + "','" + textBox2.Text + "','" +
textBox3.Text + "','" + textBox4.Text + "','" +
textBox5.Text + "')", connection);
command.Connection.Open();
if ((ISExisted(id)) && (CheckUserFullName(textBox2.Text)) && (IsValidEmail(textBox3.Text)) && (IsValidPhoneNumber(textBox4.Text)) && (IsValidPassword(textBox5.Text)))
{
command.ExecuteNonQuery();//String or binary data would be truncated
MessageBox.Show("Added.");
ShowAllUsers();
}
else
{
MessageBox.Show("Something wrong");
}
command.Connection.Close();
}
此错误表示您正试图更新一个值,该值对于数据库列定义来说太长 在您的数据库中,检查您的
全名
、电子邮件地址
、电话号码
和密码
字段的长度,假设它们被定义为varchar[10]
,此错误意味着您试图用长度超过10个字符的字符串更新其值
检查其中一个文本框中存储的值的长度:textBox2.Text
、textBox3.Text
、textBox4.Text
或textBox5.Text
。其中之一的文本长度超过数据库模式所接受的长度
解决方案1:
增加数据库中的列大小
解决方案2:
使用
Textbox.MaxLength
来限制用户的输入长度。此错误意味着您正试图更新一个值,该值对于数据库列定义来说太长
在您的数据库中,检查您的全名
、电子邮件地址
、电话号码
和密码
字段的长度,假设它们被定义为varchar[10]
,此错误意味着您试图用长度超过10个字符的字符串更新其值
检查其中一个文本框中存储的值的长度:textBox2.Text
、textBox3.Text
、textBox4.Text
或textBox5.Text
。其中之一的文本长度超过数据库模式所接受的长度
解决方案1:
增加数据库中的列大小
解决方案2:
使用
Textbox.MaxLength
限制用户的输入长度。错误的唯一目的是:指定的列大小小于您提供的值,该值只能从表结构中得知
再次停止使用字符串连接传递值,而使用参数化查询来避免SQL注入。使用类
您的参数化INSERT
语句应该如下所示
string query = "insert into UsersTB(User_ID,Full_Name,Email_Address,Phone_Number,Password) values(@User_ID,@Full_Name,@Email_Address,@Phone_Number,@Password)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.Add("@User_ID",id.ToString());
command.Parameters.Add("@Full_Name",textBox2.Text);
command.Parameters.Add("@Email_Address",textBox3.Text);
command.Parameters.Add("@Phone_Number",textBox4.Text);
command.Parameters.Add("@Password",textBox5.Text);
该错误的唯一目的是:指定的列大小小于提供的值,该值只能从表结构中得知 再次停止使用字符串连接传递值,而使用参数化查询来避免SQL注入。使用类 您的参数化
INSERT
语句应该如下所示
string query = "insert into UsersTB(User_ID,Full_Name,Email_Address,Phone_Number,Password) values(@User_ID,@Full_Name,@Email_Address,@Phone_Number,@Password)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.Add("@User_ID",id.ToString());
command.Parameters.Add("@Full_Name",textBox2.Text);
command.Parameters.Add("@Email_Address",textBox3.Text);
command.Parameters.Add("@Phone_Number",textBox4.Text);
command.Parameters.Add("@Password",textBox5.Text);
你的数据库中的用户Id和电话号码的数据类型是什么?你知道当你想更新一些东西时,你可以回答你的问题吗?请搜索有关Sql注入的信息。你的代码是一场等待发生的灾难我不这么认为[User\u ID]是nchar(5)如果你的数据类型是int,那么不要使用单cot(')你的数据库中的User\u ID和PhoneNumber的数据类型是什么你知道当你想更新某些东西时你可以回答你的问题吗?请搜索有关Sql注入的信息。你的代码是一场等待发生的灾难我不认为[User_ID]是nchar(5)如果你的数据类型是int,那么不要使用单cot(')一秒钟我想检查我的值,谢谢你的帮助。如果您还需要什么,请告诉我。因此,增加数据库中的列大小,这将解决您的问题;对我的处境也有好处吗?没问题,乐意帮忙。请接受我的正确答案,我将不胜感激。我想检查一下我的价值观,谢谢你的帮助。如果您还需要什么,请告诉我。因此,增加数据库中的列大小,这将解决您的问题;对我的处境也有好处吗?没问题,乐意帮忙。接受我正确的回答将不胜感激。