2010-09-01 4 views
3

У меня есть следующий код C# для вызова хранимой процедуры testproc, но когда я запускаю это приложение, он говорит, что не смог найти хранимую процедуру testproc.Ошибка при вызове хранимой процедуры с C#

Это мой C# код позади, чтобы вызвать хранимую процедуру:

SqlConnection con = new SqlConnection(); 
con.ConnectionString = "data source='example.com';user id='sa';password='password';persist security info=False;initial catalog=Test;Connect Timeout=100; Min Pool Size=100; Max Pool Size=500"; 
con.Open(); 

DataSet ds = new DataSet(); 
SqlCommand com = new SqlCommand("testproc",con); 
SqlDataAdapter sqlda = new SqlDataAdapter(com); 
//sqlda.SelectCommand.CommandText = "SELECT Id,Name1,ZipCode,StreetName,StreetNumber,State1,Lat,Lng,Keyword, (6371 * ACOS(COS((12.925432/57.2958)) * COS( (Lat/57.2958) ) * COS((Lng/57.2958) - (77.5940171/57.2958)) + SIN(12.925432/57.2958) * SIN( Lat/57.2958 ))) AS distance FROM Business_Details where((StreetName like '%jayanagar%')and (Keyword like '%plumbing%'))ORDER BY distance;"; 
//sqlda.CommandText = "select * from business where((distance<'" + radius + "')and (StreetName like '%" + streetname + "%')and (Keyword like '%" + keyword1 + "%')) order by distance"; 
//com.CommandText = "testproc "; 
com.CommandType = CommandType.StoredProcedure; 
com.Parameters.Add(new SqlParameter("@lat1",SqlDbType.Float,50,lat1)); 
com.Parameters.Add(new SqlParameter("@lng1",SqlDbType.Float,50,lng1)); 
com.Parameters.Add(new SqlParameter("@radius1",SqlDbType.Int,10,radius1)); 
com.Parameters.Add(new SqlParameter("@streetname", SqlDbType.VarChar, 50, streetname)); 
com.Parameters.Add(new SqlParameter("@keyword1", SqlDbType.VarChar, 50, keyword1)); 
com.Parameters[0].Value = lat1; 
com.Parameters[1].Value = lng1; 
com.Parameters[2].Value = radius1; 
com.Parameters[3].Value = streetname; 
com.Parameters[4].Value = keyword1; 
try 
{     
    sqlda.Fill(ds); 
    con.Close(); 
} 
catch (Exception e) 
{ 
    con.Close(); 
} 

Это моя хранимая процедура, я написал в SQL Server. Он успешно работает в сервере SQL

USE [Test] 
GO 
/****** Object: StoredProcedure [dbo].[tesproc] Script Date: 09/01/2010 13:00:54 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[tesproc] 
    -- Add the parameters for the stored procedure here 
    @a float, @b float, @d int,@s varchar(50),@k varchar(50) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    select Id, Name1,ZipCode,StreetName,StreetNumber,State1,Lat,Lng , (6371 * ACOS(COS((@a/57.2958)) * COS( (Lat/57.2958) ) * COS((Lng/57.2958) - (@b /57.2958)) + SIN(@a/57.2958) * SIN( Lat/57.2958 ))) as distance from business_details where ((6371 * ACOS(COS((@a/57.2958)) * COS( (Lat/57.2958) ) * COS((Lng/57.2958) - (@b /57.2958)) + SIN(@a/57.2958) * SIN( Lat/57.2958 )))<@d and StreetName like '%'+ @s + '%' and Keyword like '%'+ @k +'%') 
END 
+3

Я знаю, что это локальная БД, и это выглядит как пароль тестирования, но вы всегда должны быть осторожными отправку сведений о соединении. :) – DavidGouge

+0

Спасибо за ваше предложение от следующего я не опубликую какие-либо подробности подключения. – mahesh

ответ

3

В любом случае ваш код должен выглядеть следующим образом:

using (SqlConnection connection = new SqlConnection(connectionString)) 
using (SqlComamnd command = connection.CreateCommand()) 
{ 
    command.CommandText = commandText; 
    command.CommandType = CommandType.StoredProcedure; 

    command.Parameters.Add("@lat1", SqlDbType.Float,50, lat1).Value = lat1; 
    command.Parameters.Add("@lng1", SqlDbType.Float,50, lng1).Value = lng1; 
    command.Parameters.Add("@radius1", SqlDbType.Int,10, radius1).Value = radius1; 
    command.Parameters.Add("@streetname", SqlDbType.VarChar, 50, streetname).Value = streetname; 
    command.Parameters.Add("@keyword1", SqlDbType.VarChar, 50, keyword1).Value = keyword1; 

    connection .Open(); 
    DataSet ds = new DataSet(); 
    using (SqlDataAdapter adapter = neq SqlDataAdapter(command)) 
    { 
     adapter.Fill(ds);     
    } 
} 
+0

@mahesh: Спасибо, рад, что это помогло! :) – abatishchev

6

Ваше ALTER заявление называет tesproc, но ваша команда SQL называет testproc

+0

Спасибо за ответ, я не могу отследить ваш ответ, пожалуйста, можете ли вы быть более ясным. – mahesh

+0

Ваша хранимая процедура называется 'tesproc' только с одним T. Следующая строка имеет testproc, записанный с TWO T:' SqlCommand com = new SqlCommand ("testproc", con); '. Одна из них - типографская ошибка. Я не могу быть более ясным, чем это. – LittleBobbyTables

+0

Спасибо за ваш ответ, извините, с моей стороны я внимательно заметил, что их в орфографической ошибке. – mahesh

5

Проверка орфографии, ваша процедура называется

[dbo].[tesproc] 

и ваш код телефон

SqlCommand("testproc",con); 

Вы можете als о добавлении параметров с помощью

Parameters.AddWithValue(string parameterName, Object value) 

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

если вы хотите :)

+0

Спасибо за ваш ответ, я не заметил, что орфографическая ошибка вообще благодарит за ответ – mahesh

3

Вместо этого громоздкого кода

com.CommandType = CommandType.StoredProcedure; 
com.Parameters.Add(new SqlParameter("@lat1",SqlDbType.Float,50,lat1)); 
com.Parameters.Add(new SqlParameter("@lng1",SqlDbType.Float,50,lng1)); 
com.Parameters.Add(new SqlParameter("@radius1",SqlDbType.Int,10,radius1)); 
com.Parameters.Add(new SqlParameter("@streetname", SqlDbType.VarChar, 50, streetname)); 
com.Parameters.Add(new SqlParameter("@keyword1", SqlDbType.VarChar, 50, keyword1)); 
com.Parameters[0].Value = lat1; 
com.Parameters[1].Value = lng1; 
com.Parameters[2].Value = radius1; 
com.Parameters[3].Value = streetname; 
com.Parameters[4].Value = keyword1; 

И вы присваиваете значение снова параметров

us е AddWithValue метод, чтобы добавить параметр в команду

com.Parameters.AddWithValue("@lat1", lat1)); 
com.Parameters.AddWithValue("@lng1", lng1)); 
com.Parameters.AddWithValue("@radius1", radius1)); 
com.Parameters.AddWithValue("@streetname", streetname)); 
com.Parameters.AddWithValue("@keyword1", keyword1)); 
+1

Спасибо за предложения, я внесла изменения в код com.Parameters.AddwithValue ("@ lat1", lat1); его полезно спасибо. – mahesh

Смежные вопросы