0

我对在 C# 中使用存储过程非常陌生。但是 m 无法将值完全插入数据库?

create procedure insertPro
     (@name as varchar,
      @lname as varchar,
      @phone as varchar)
as
    insert into std_info 
    values (@name, @lname, @phone)
go

这是我的 C# 代码

SqlConnection con = new SqlConnection("Data Source=xxxxxxxx;Integrated Security=SSPI;Initial Catalog=xxxxx");
        SqlCommand cmd = new SqlCommand("insertPro",con);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = textBox1.Text;
        cmd.Parameters.Add("@lname", SqlDbType.VarChar).Value = textBox2.Text;
        cmd.Parameters.Add("@phone", SqlDbType.VarChar).Value = textBox3.Text;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

这会将值插入数据库但不完全,例如,如果我将名字插入为 abc,那么它只为姓氏和电话插入一个和相同的值?

4

3 回答 3

3

在你的参数上加上一个长度:

create procedure insertPro(
@name as varchar(30),
@lname as varchar(30),
@phone as varchar(30)
于 2013-06-04T07:35:17.137 回答
1
@name as varchar

所以使用 simplevarchar没有指定任何长度。它只需要一个字符。这就是为什么您在表中只看到一个字符的原因。您只需指定它们的长度等于列的长度。

  @name as varchar(100)
于 2013-06-04T07:37:01.817 回答
1

将您的存储过程更改为:

create procedure insertPro
(
   @name as varchar(max), //change (max) to maximum constraint length you set for each column
   @lname as varchar(max),
   @phone as varchar(max)
) 
as 

  insert into std_info values (@name,@lname,@phone)
于 2013-06-04T07:35:27.590 回答