将变量传递给存储过程,c#

Posted

技术标签:

【中文标题】将变量传递给存储过程,c#【英文标题】:passing variable to a stored procedure, c# 【发布时间】:2011-09-15 11:06:16 【问题描述】:

我有一个变量“keypress”,当我们的系统拨打电话时会设置它。写入我们的文本文件的方式如下:

w.Write(attrColl["keypress"].Value);

我需要做的是在这些按键进入时将它们传递给存储过程。

所以,我的第一个问题是如何将它传递给存储过程,我的代码如下所示:

mysqlCommand.Parameters.Add("@Q1", SqlDbType.Int).Value = keypress;
mySqlCommand.Parameters.Add("@Q2", SqlDbType.Int).Value = keypress;

例如:如果第一个按键是500#,第二个按键是300#。 它应该看起来像 @Q1 = 500# 和 @Q2 = 300#

我需要先将按键转换为字符串吗?如果是这样,最好的方法是什么,因为我有大约 10 个问题,所以我有 10 个独特的按键返回。

其次,因为每次按键的末尾都有一个# 符号,sproc 输入是否会是 nvarchar 而不是 int?或者处理 # 的最佳方式是什么。

感谢任何想法、建议或文档。

【问题讨论】:

桌子长什么样? 该表正在寻找 Int,它有大约 20 列,因此剩余的空白位置将为空。如果我可以去掉 aspx 端的 #,那会很好用。我在想也许是一个数组。 【参考方案1】:

我假设您的文本文件看起来有点像这样,都在一行中。

100#400#900#

我还假设您已将这一行读回到 somename 的变量中。

所以

        var keypressline = "100#400#900#";
        var keyPresses = keypressline.Split('#');
        for (var i = 0; i < keyPresses.Length; i++)
                       
            mySqlCommand.Parameters.AddWithValue("@Q" + i, keyPresses[i]);
        

我故意将@Q 保留为字符串。如果您转换为整数,如果先按 0,您将失去事实。

编辑:包含加载文件代码

string fullPathAndFileName = @"C:\blah\blah.txt";
string keypresses;
using (StreamReader sr = new StreamReader(fullPathAndFileName)) 

    while (sr.Peek() >= 0) 
    
        keyPresses = sr.ReadLine();
    ...
    

【讨论】:

这是有道理的,而且很棒,但我仍然对这种方法有一些问题。并非所有按键都以# 结尾,大多数都以# 结尾,但不是全部。目前按键行被发送到文本文件并组装在文本文件中,而不是 aspx。 如果哈希是保证分隔符,您需要讨论添加按键的模式。回到原来的问题并添加更多细节。

以上是关于将变量传递给存储过程,c#的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组传递给 oracle 存储过程

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量

将函数返回值传递给存储过程参数

C#使用输出变量调用存储过程时出错,未提供参数

将变量从 Access(前端)传递到 Oracle(后端)存储过程

如何将数组传递到 SQL Server 存储过程