0

新しい ID を返すストアド プロシージャがあります。

create proc [dbo].[WriteIT]
   (@deg nvarchar(max))
as
   DECLARE @s nvarchar(max)

   set @s = 'INSERT INTO test OUTPUT inserted.ID VALUES '
   set @s += @deg

   exec (@s)

ストアドプロシージャの複数の結果を取得するにはどうすればよいint[]ですか?

string con = "Server=.;Database=Adb;Trusted_Connection=True";

SqlConnection connet = new SqlConnection(con);

SqlCommand cm = new SqlCommand("WriteIT", connet);
cm.CommandType = System.Data.CommandType.StoredProcedure;    

bd = new StringBuilder();
string veri = "({0}),";
string sablon = "'{0}','{1}'";

for (int i = 0; i < 50; i++)
{
    bd.Append(string.Format(veri, string.Format(sablon, new Random().Next(0, 100000).ToString(), new Random().Next(0, 100000).ToString())));
}

cm.Parameters.AddWithValue("@deger", bd.ToString().Substring(0, bd.Length - 1));

if (connet.State == System.Data.ConnectionState.Closed)
    connet.Open();

string a = cm.ExecuteScalar();
4

2 に答える 2

0

ExecuteScalar は、結果から最初の行の最初の列のみを返すことを意図してい
ます。SProc が複数の値を返す場合は、ExecureReader()メソッドを使用できます。

SqlConnection sqlConnection1 = new SqlConnection("Your Connection String");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;

cmd.CommandText = "StoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;

sqlConnection1.Open();

reader = cmd.ExecuteReader();
// Data is accessible through the DataReader object here.

sqlConnection1.Close();


Random class も読む必要があります。数値を生成するには、同じインスタンスを使用する必要があります。

于 2013-09-11T03:25:19.797 に答える
0
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Usp_CRMEntryInsert]
@custnam nvarchar(250),
@proj nvarchar(255),
@projid int,
@contact nvarchar(100),
@updfile nvarchar(150),
@vtype  nvarchar(100),
@sts varchar(15),
@recsts varchar(1),
@entryid int,
@entrydate datetime,
@dataentrydate datetime
AS
BEGIN
    SET NOCOUNT ON;
insert into CRMEntry (custnam,Proj,projid,contact,updfile,vtype,status,rec_status,entered_id,entered_date,entry_date) values (@custnam,@proj,@projid,@contact,@updfile,@vtype,@sts,@recsts,@entryid,@entrydate,@dataentrydate)
select scope_identity()

この Scope_identity() は最大値を返します

maxid = cmd.ExecuteScalar()
于 2013-09-11T04:29:22.850 に答える