【问题标题】:SQLServer CLR with parameters带参数的 SQLServer CLR
【发布时间】:2014-11-18 22:43:18
【问题描述】:

我尝试在 C# 中创建一个 CLR 以在 SQLServer Management Studio 2014 中使用。现在一切正常,除非我开始插入参数。

如何在 CLR 中插入参数并在 PROC 中使用它? 我试着把参数放在函数括号里:

public static void InsertInto(SqlString street, SqlInt32 number)
    {
        using(SqlConnection conn = new SqlConnection("context connection = true"))
        {
            SqlCommand comm = new SqlCommand();
            comm.CommandText = "INSERT INTO TABLE_CLRTEST (COLRW_STREET, COLRW_NUMBER) VALUES("+street+","+number+")";

我似乎无法连接 SqlString,它也不允许我使用字符串。

在 C# 中,我试过这样:

comm.CommandText = "INSERT INTO TABLE_CLRTEST (COLRW_STREET, COLRW_NUMBER) VALUES(@street,@number)";

            comm.Parameters.Add("@street", SqlDbType.VarChar,50);
            comm.Parameters.Add("@number", SqlDbType.Int);

当我使用它时得到以下错误:CREATE PROCEDURE failed because parameter counts do not match. 所以还是什么都没有。

你们知道发生了什么事吗?如果您需要澄清,尽管问。

提前致谢

编辑: 下面提供的代码 sn-p 正在工作。似乎字符串不起作用。

public static void updateTest(SqlInt32 lo, SqlInt32 la)
    {
        using (SqlConnection conn = new SqlConnection("context connection = true"))
        {
conn.Open();
                SqlCommand update = new SqlCommand();
                update.CommandText = "UPDATE TABLE_CLRTEST SET COLRW_LONGITUDE = " + lo + ", COLRW_LATITUDE = " + la + "";
                update.Connection = conn;
                update.ExecuteNonQuery();
                conn.Close();
}
}

【问题讨论】:

  • 我似乎无法连接你可以。您只需将' 用于字符值(在您的情况下为street)。但始终首选参数化查询。顺便说一句,CREATE PROCEDURE 到底是什么?
  • 请向我们展示您的脚本,用于创建 clr 过程的“包装器”
  • 试试AddWithValue 例如comm.Parameters.AddWithValue("@street", street)
  • 这是您的完整代码吗?你的INSERT 使用参数的命令(强烈推荐而不是你的第一个)对我来说看起来不错。
  • @SonerGönül 我不明白。我应该...VALUES("+'street'+","+number+"...吗?因为这似乎也不起作用。 CREATE PROCEDURE 是 SQLServer 中的东西,可用于运行某段 TSQL 代码。

标签: c# sql-server tsql sql-insert sqlclr


【解决方案1】:
comm.CommandText = "INSERT INTO TABLE_CLRTEST (COLRW_STREET    , COLRW_NUMBER)  
                                        VALUES('" + street + "'," + number +" )";

在您的参数中,您没有分配值。

comm.Parameters.Add(
   "@street", SqlDbType.VarChar,50).Value = street;

【讨论】:

  • 是赋值给变量的值,还是这里的变量名?当你事后改变它时,给它一个值似乎很奇怪。
  • 这是两个选项,是的,烤面包机将是变量。而且该代码以后不会更改它。
【解决方案2】:

我忘记了Add 声明。 最终代码:

SqlCommand command = new SqlCommand();
SqlParameter pstreet = new SqlParameter("@street", SqlDbType.VarChar, 150);
command.CommandText = "INSERT INTO CHIEF_TEST.dbo.TABLE_CLRTEST(COLRW_STREET) VALUES(@street)";
command.Parameters.Add(pstreet);

【讨论】:

  • 你仍然没有赋值。这里有什么难的?我发布了正确的答案。
猜你喜欢
  • 2015-06-07
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2019-12-29
相关资源
最近更新 更多