c# - 如何在 C# 中调用 SQL 函数?

标签 c# sql sql-server-2008 function

我已经在 SQL 中创建了一个函数,现在我需要在我的 C# 应用程序中使用该函数。

我试过使用这样的东西,但似乎我做错了,因为我得到:

Must declare the scalar value '@2064734117'

...当我将 2064734117 作为第一个参数并将 1 作为第二个参数时。这是我正在谈论的代码:

SqlConnection con = new SqlConnection(clsDb.connectionString);
string query = string.Format("select Function1(@{0},@{1}) ",
  int.Parse(e.CurrentRow.Cells["CodeMeli"].Value.ToString()),1);
con.Open();
SqlCommand cmd = new SqlCommand(query,con);
SqlDataAdapter READER = new SqlDataAdapter();
READER.SelectCommand = cmd;
DataTable table = new DataTable();
READER.Fill(table);
radGridView1.DataSource = table;
con.Close();

我的函数采用两个整数参数并返回一个表。我在 Visual Studio 中对其进行了检查,它可以正常工作,但我无法在我的应用程序中使用它。

这是我的函数声明:

ALTER FUNCTION dbo.Function1
(
/*
@parameter1 int = 5,
@parameter2 datatype
*/
@ID int,
@clsTypeID int
)
    RETURNS TABLE/* @table_variable TABLE (column1 datatype, column2 datatype) */
    AS
         /*BEGIN */
    /* INSERT INTO @table_variable
       SELECT ... FROM ... */
RETURN SELECT  * FROM tblCLASS2 
        WHERE STNID = @ID AND CLASSTYPEID =  @clsTypeID  
/*END */
/*GO*/

最佳答案

你的SQL有点不对,应该是:

  string query = string.Format("select * from dbo.Function1({0},{1});", int.Parse(e.CurrentRow.Cells["CodeMeli"].Value.ToString()),1);

你可能想使用 SqlParameter 对象来防止 sql 注入(inject):

  string query = "select * from dbo.Function1(@pa1,@par2);";
  cmd.Parameters.Add("@par1", SqlDbType.Int).Value = int.Parse(e.CurrentRow.Cells["CodeMeli"].Value.ToString());  
  cmd.Parameters.Add("@par2", SqlDbType.Int).Value = 1;

关于c# - 如何在 C# 中调用 SQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796530/

相关文章:

c# - 矩阵的左上象限的最大和可以通过反转行和列来形成

MySQL 8 创建新用户,密码不起作用

mysql - SQL Like 在 "/"上崩溃

sql - 使用通用的相关子查询有效地提取不同的列

sql-server - 关于已弃用的功能(多于两部分的列名称)

c# - 如何将 C# 中的文件内容直接流式传输到 args?

c# - 在 StackService.Redis 客户端方法 Store() 上导致 stackoverflow 的递归对象

mysql - Oracle中如何将多行数据合并到单个结果记录中?

sql-server - 在 SQL Server 中存储坐标(经度/纬度,来自 Google map )的最佳方式是什么?

c# - 如何匹配正则表达式中以空格分隔的所有单词?