表结构是
userid int
fname varchar(50)
lname varchar(50)
Email varchar(50)
Phone decimal(18,2)
这是程序
ALTER procedure [dbo].[AddUser]
@userid int,
@fname varchar(50),
@lname varchar(50),
@Email varchar(50),
@Phone decimal(18,2)
as
insert into UserInfo(Userid, Fname, Lname, Email, Phone)
values(@userid, @fname, @lname, @Email, @Phone)
这是我的代码......
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["con1"]);
try
{
con.Open();
SqlCommand cmd = new SqlCommand("AddUser",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@userid",Int32.Parse(TextBox1.Text.Trim()));
cmd.Parameters.AddWithValue("@fname",TextBox2.Text) ;
cmd.Parameters.AddWithValue("@lname",TextBox3.Text) ;
cmd.Parameters.AddWithValue("@Email",TextBox4.Text);
cmd.Parameters.AddWithValue("@Phone",TextBox5.Text);
cmd.ExecuteNonQuery();
Label1.Text = "Record Has Been Added Successfully!";
}
catch (Exception en)
{
Label1.Text = "Retry to add";
}
}
如果我输入Phone
没有最大值,例如。 233242342423它给出了错误...请问如何解决?
答案 0 :(得分:0)
我建议您定义varchar(15)来存储手机。 (对于该字段的性能定义索引)
答案 1 :(得分:0)
不仅会丢失前导零,而且将电话号码存储为整数或双精度也是不好的做法。 使用字符串(文本字段),因为您不会对电话号码进行任何算术运算。
答案 2 :(得分:0)
您使用AddWithValue
的方式,该命令假定您的string
类型的所有列(第一列除外)。
这对于列不适用:
cmd.Parameters.AddWithValue("@Phone",TextBox5.Text)
可能未在数据库中定义为字符串,因此您需要尝试显式解析它们。注意 - 您需要考虑更换存储手机的类型(varchar
将是一个不错的选择。)
答案 3 :(得分:0)
您不应将电话号码数据类型视为小数。 把电话号码作为一个字符串,并给出长度 phone varchar(18)。 它会起作用。
答案 4 :(得分:0)
AddWithValue方法根据您为其提供的值的类型将您的值转换为SQL数据类型。如果SQL数据类型是十进制,则需要解析为AddWithValue的.NET十进制以正确转换它:
cmd.Parameters.AddWithValue("@Phone", Decimal.Parse(TextBox5.Text));