2015-03-05 5 views
0

Я пишу эту функцию в SQL:Вызов SQL функция C#

ALTER FUNCTION Fn_CheckBill 
(
@image AS image, 
@number AS nvarchar(50), 
@date AS nchar(10) 
) 
RETURNS bit 
AS 
BEGIN 
DECLARE @flag bit; 
IF EXISTS (SELECT * 
      FROM tblBill 
      WHERE ((cast([Image] as varbinary(max)) = cast(@image as varbinary(max))) AND (Number = @number) AND ([Date] = @date))) 
      BEGIN 
       SET @flag = 0 
      END 
ELSE 
    BEGIN 
     SET @flag = 1 
    END 

RETURN @flag 
END 

И написать этот код в моем C# исходный код:

int flag; 
    try 
    { 
     objCommand = new SqlCommand("SELECT Fn_CheckBill(@image,@date,@number) AS int"); 
     objCommand.CommandType = CommandType.Text; 

     objCommand.Parameters.AddWithValue("image", image); 
     objCommand.Parameters.AddWithValue("number", number); 
     objCommand.Parameters.AddWithValue("date", _Date); 

     using (objConnection = new SqlConnection(connenctString)) 
     { 

      objConnection.Open(); 
      objCommand.Connection = objConnection; 
      flag = int.Parse(objCommand.ExecuteScalar().ToString()); 
     } 

     if (flag == 1) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch 
    { 
     return false; 
    } 

Но это бросить это исключение при выполнении: «Fn_CheckBill 'не является признанным именем функции.

Пожалуйста, помогите мне решить эту проблему :(

+0

вы уверены, что вы подключили правильную базу данных в строке подключения –

+0

@ SonerGönül Да Это работа –

+0

'п?. text, 'text' и' image' будут удалены в будущей версии SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте изменять приложения, которые в настоящее время их используют. Вместо этого используйте 'nvarchar (max)', 'varchar (max)' и 'varbinary (max)'. [См. Подробности здесь] (http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

ответ

3

Вам необходимо предоставить схему в любом вызове функции SQL

objCommand = new SqlCommand("SELECT dbo.Fn_CheckBill(@image,@date,@number) AS int"); 
+0

Спасибо :) работал –

0

Я хотел бы рассмотреть переписывание это как значной функции инлайн таблицы. Что-то вроде этого :

create FUNCTION Fn_CheckBill 
(
    @image AS varbinary(max), 
    @number AS nvarchar(50), 
    @date AS nchar(10) 
) 
RETURNS table 
AS 
RETURN 
    SELECT CAST(count(*) as bit) as RowFound 
    FROM tblBill 
    WHERE [Image] = @image 
     AND Number = @number 
     AND [Date] = @date