我已经在SQL中创建了一个函数,现在我需要在C#应用程序中使用该函数。
我尝试使用类似的方法,但由于得到以下内容,看来我做错了:
Must declare the scalar value '@2064734117'
…当我给出2064734117第一个参数和1第二个参数时 这是我正在谈论的代码:
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-objects防止sql注入:
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;