我尝试将两个数据从两个不同的文本框插入到同一列中。例如,一个人有两个电话号码。在这种情况下,人和电话号码是两个单独的表,电话号码表只有一列来存储电话号码。 我尝试使用存储过程插入数据。 这是存储过程代码。
ALTER Procedure [dbo].[Ph]
@name varchar(200),
@phonenumber varchar(200)
AS
Begin
Declare @P_ID int
insert into person(Name)
values (@name)
SELECT P_ID = SCOPE_IDENTITY()
insert into phonenumber(PhoneNumber, P_ID)
values (@phonenumber, @P_ID)
RETURN
END
但是,当我尝试插入数据时,会出现一条错误消息,引用“过程或函数Ph指定了太多参数。”。这是用于插入数据的C#代码。
using (SqlConnection con = new SqlConnection("Data Source=YAMADA;Initial Catalog=testtest;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("Ph", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@phonenumber", SqlDbType.Int).Value = TextBox2.Text;
cmd.Parameters.Add("@phonenumber", SqlDbType.Int).Value = TextBox3.Text;
con.Open();
cmd.ExecuteNonQuery();
}
}
有人可以帮我修复此错误吗? 提前谢谢。
答案 0 :(得分:1)
该过程只接受两个,但您已添加三个,删除最后一个参数。还有一件事需要注意,第二个参数应该是varchar类型,但是你将它们指定为整数。请改变它们。最后代码将是
using (SqlCommand cmd = new SqlCommand("Ph", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@phonenumber", SqlDbType.VarChar).Value = TextBox2.Text;
con.Open();
cmd.ExecuteNonQuery();
}
答案 1 :(得分:1)
修改程序以接受2个电话号码,然后逐个插入:
ALTER Procedure [dbo].[Ph]
@name varchar(200),
@phonenumber varchar(200),
@phonenumber2 varchar(200)
AS
Begin
Declare @P_ID int
insert into person(Name)
values (@name)
SELECT @P_ID = SCOPE_IDENTITY()
insert into phonenumber(PhoneNumber, P_ID)
values (@phonenumber, @P_ID)
insert into phonenumber(PhoneNumber, P_ID)
values (@phonenumber2, @P_ID)
END
然后在调用程序时添加两个电话号码:
using (SqlConnection con = new SqlConnection("Data Source=YAMADA;Initial Catalog=testtest;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("Ph", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@phonenumber", SqlDbType.VarChar).Value = TextBox2.Text;
cmd.Parameters.Add("@phonenumber2", SqlDbType.VarChar).Value = TextBox3.Text;
con.Open();
cmd.ExecuteNonQuery();
}
}
答案 2 :(得分:0)
首先:您只能将每个参数添加一次到命令。
作为解决方案,您有三种选择:
数据库中第二个数据表的干净approch。 例如:用户ID,电话号码,电话号码 userid是您的usertable的外键。 phoneid与userid结合使用新表的主键。最后但并非最不重要的是,phonenumber是您的用户号码之一。像这样你可以添加任意数量的电话号码。
我眼中的一个肮脏的approch:将您的电话号码的列类型更改为nvarchar,并将电话号码添加为逗号分隔值。
添加更多的phonenumber列。例如。 Phonenumber1,Phonenumber2 ...... 但是这个approch也不是一个理想的,因为当你想要添加更多的数字时,Theresa仍然是一个问题...
最后但并非最不重要:int不是columntype的好选择。 你想用+49 177 77777777做什么。
答案 3 :(得分:-2)
试试这个:
using (SqlConnection con = new SqlConnection("Data Source=YAMADA;Initial Catalog=testtest;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("Ph", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@phonenumber", SqlDbType.Int).Value = TextBox2.Text + TextBox3.Text;
con.Open();
cmd.ExecuteNonQuery();
}
}