c#如何获取sql语句中@后面的参数名,
发布网友
发布时间:2022-04-11 08:54
我来回答
共4个回答
热心网友
时间:2022-04-11 10:23
sql语句的执行是在数据库端判定的,所以.net没有提供获取的方法。
首先,依照你的需求,计算你取到了@后面的名字,你也不会知道@后面参数的名字是什么类型的,一样会有问题。还有特殊类型中还需要指定长度参数,例如varchar,nvarchar等;
因为sql语句是一个字符串,所以获取的唯一方法就是使用正则。
var pattern = @"@(\S+)";
然后用Match.Result("$1") 循环获取每一个捕获组的数就行了
热心网友
时间:2022-04-11 11:41
你可以使用sqlparameters这个类型的数组,
每次循环动态添加,最后清除参数.
热心网友
时间:2022-04-11 13:16
split(sql,'@'.tocharry()) 然后再针对数组中每个元素进行字符串处理,转换为字节的写法忘记了,大体是这样。追问难道C#语言中没有自带的方法吗?微软怎么会忽略这么重要的功能。。唉,失望啊。实在没有输入法只有用切割的方法了。。
追答暂时么有
热心网友
时间:2022-04-11 15:07
提供一个完整的例子:
CREATE procere [dbo].[user_logon]
@userid char(2),
@username nvarchar(50) output
as
declare @s varchar(1000)
begin
select @username=username,@s=userbm from shopuser where userid=@userid
if @username=null
begin
set @username='不存在该用户'
end
else
begin
set @s = 'select bmid +'''+' '+'''+bmmc from xsbm where bmid in ('+@s+')'
exec(@s)
end
end
GO
C#:
SqlCommand cmd = new SqlCommand("user_logon", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.Add( new SqlParameter("@shopuserid",SqlDbType.Char,2){Value=tbxUserID.Text.Trim()});
cmd.Parameters.Add( new SqlParameter("@shopusername",SqlDbType.NVarChar, 50){Direction=ParameterDirection.Output} );
SqlDataReader dr = cmd.ExecuteReader();
label5.Text = Convert.ToString(cmd.Parameters["@shopusername"].Value);//显示username
while (dr.Read())
{
cbxKuzi.Items.Add(dr.GetString(0)); //填充登录部门
}