2013-06-04 42 views
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那麼它只能插入一個和相同的姓氏和電話?

回答

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) 
+1

會說這個表應該符合定義的程序(即VARCHAR(最大值)的資格這一點,否則SQL Server將拋出一個異常截斷是 –

+0

,這就是爲什麼我添加的註釋將其更改到合適的長度:) – gzaxx

3

把你的參數長度:

create procedure insertPro(
@name as varchar(30), 
@lname as varchar(30), 
@phone as varchar(30) 
+0

請注意,您必須將長度更改爲表的實際列長度。 –

1
@name as varchar 

因此,使用簡單varchar沒有指定任何長度。它只需要單個字符。所以這就是爲什麼你在桌子上只看到一個字符的原因。你只需要指定它們的長度等於列的長度。

@name as varchar(100) 
相關問題