0

データベースでストアドプロシージャを作成しました

ALTER procedure [dbo].[usercusdet_pro](@user varchar(25),@cusname varchar(max))--,@cnt int)
as
begin
    --declare @count int
    --set @count=0
    --if(@count<@cnt)
    insert usercusdet values(@user,@cusname)
end

値を挿入します。ボタンをクリックすると、テーブルに複数の行が挿入されます。

int cnt = gvTranferRows.Rows.Count;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["gdb"].ConnectionString);

con.Open();

SqlCommand cmd = new SqlCommand("usercusdet_pro", con);
cmd.CommandType = CommandType.StoredProcedure;

if (con.State == ConnectionState.Closed)
    con.Open();

for (int i=0;i<cnt;i++)
{
     cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = "A001";
     cmd.Parameters.AddWithValue("@cusname",gvTranferRows.Rows[i].Cells[0].Text);
     //cmd.Parameters.AddWithValue("@cnt", cnt);
     cmd.ExecuteNonQuery();
}

値を追加しようとすると、エラーが表示されます。

プロシージャまたは関数に指定された引数が多すぎます

このエラーの原因は何ですか?

4

2 に答える 2

0

SQL Server 2008 以降では、テーブル値パラメーターを使用できます。

また

SQL Server 2008 より前のバージョンを使用している場合は、データを XML として渡すことができます。

また

良いアプローチではありませんが、区切り文字で区切られた文字列も使用できます。

于 2013-09-18T11:52:57.170 に答える
0

次の反復の前にパラメーターをクリアする必要があります。

cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = "A001";
cmd.Parameters.AddWithValue("@cusname",gvTranferRows.Rows[i].Cells[0].Text);
//cmd.Parameters.AddWithValue("@cnt", cnt);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();

または、@userパラメーターが固定されている場合は、パラメーターを置き換えるだけ@cusnameです

cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = "A001";
for (int i=0;i<cnt;i++)
{
    cmd.Parameters.AddWithValue("@cusname",gvTranferRows.Rows[i].Cells[0].Text);
    cmd.ExecuteNonQuery();
    cmd.Parameters.RemoveAt("@cusname");
}
于 2013-09-18T11:48:49.153 に答える