locked
Проблема с хранимой процедурой RRS feed

  • Вопрос

  • Здравствуйте

    Пытаюсь вызвать хранимую процедуру FUCreate (В базе она есть точно!)

    код:

    using (SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString))
                    {
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = connect;
                        cmd.CommandText = "[FUCreate]";
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@CrDT", SqlDbType.DateTime, 8));
                        cmd.Parameters["@CrDT"].Value = System.DateTime.Now;
                        cmd.Parameters.Add(new SqlParameter("@Email", SqlDbType.NVarChar, 100));
                        cmd.Parameters["@Email"].Value = model.Email;
                        cmd.Parameters.Add(new SqlParameter("@Login", SqlDbType.NVarChar, 20));
                        cmd.Parameters["@Login"].Value = model.UserName;
                        cmd.Parameters.Add(new SqlParameter("@Passw", SqlDbType.NVarChar, 20));
                        cmd.Parameters["@Passw"].Value = model.Password;
                        cmd.Parameters.Add(new SqlParameter("@TelNumber", SqlDbType.NVarChar, 30));
                        cmd.Parameters["@TelNumber"].Value = model.Phone;
    
                        connect.Open();
                        
                        cmd.ExecuteNonQuery();
    
                        connect.Close();
                        return View();
                    }

    получаю:Не удалось найти хранимую процедуру "FUCreate".

    Из-за чего это может быть?

    22 ноября 2012 г. 6:14

Ответы

  • Проверьте строку подключения которую вы считываете из файла конфигурации.
    И проверьте, есть ли у учетки под которой заходите в БД права на вызов этой процедуры.
    22 ноября 2012 г. 7:46
    Отвечающий
  • Поставьте в начале секции connectionStrings в вэб конфиг файле тэг.

    <clear/>

    Т.е. у вас должно получится следующее:

    <connectionStrings>
    <clear/>
        <add name="11111Entities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=11111.mssql.hoster.ru;initial catalog=11111;persist security info=True;user id=11111;password=xxxxx;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />  
      </connectionStrings>

    После этого у вас по индексу 0 будет получаться именно ваша строка подключения.

    Первоначальная строка - это строка к локальной sql express БД, для того чтобы приложения по умолчанию могли работать с профайлами пользователей и т.п.

    23 ноября 2012 г. 7:32

Все ответы

  • Попробуйте указать схему перед именем: dbo.FUCreate или другое, если схема другая.
    22 ноября 2012 г. 6:17
    Модератор
  • Не помогло
    22 ноября 2012 г. 6:32
  • А если скобки убрать:

    cmd.CommandText = "FUCreate";

    22 ноября 2012 г. 6:45
    Модератор
  • Тоже нет
    22 ноября 2012 г. 6:47
  • Покажите код процедуры.
    22 ноября 2012 г. 6:50
    Модератор
  • ALTER PROCEDURE [dbo].[FUCreate](
    						  @CrDT datetime,
    						  @Email nvarchar(100),
    						  @Login nvarchar(20),
    						  @Passw nvarchar(20),
    						  @TelNumber nvarchar(30)
    						  )
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
        INSERT INTO Users (CreationDateTime,Email,Login,Password,TelNumber,Confirmed)VALUES(@CrDT,@Email,@Login,@Passw,@TelNumber,0);
        
    END

    cmd.CommandText = "[dbo].[FUCreate]";

    строка сейчас выглядит так

    22 ноября 2012 г. 6:59
  • Проверьте строку подключения которую вы считываете из файла конфигурации.
    И проверьте, есть ли у учетки под которой заходите в БД права на вызов этой процедуры.
    22 ноября 2012 г. 7:46
    Отвечающий
  • Проверьте строку подключения которую вы считываете из файла конфигурации.
    И проверьте, есть ли у учетки под которой заходите в БД права на вызов этой процедуры.

    Спасибо, суть проблемы нашёл, но возникли другие: При исполнении кода отладчик выдаёт вот такую строку подключения.

    "data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"

    это - не та база , которая нужна.

    В обозревателе БД её нет. В конфигах прописана та база, что надо.

    <connectionStrings>
        <add name="11111Entities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=11111.mssql.hoster.ru;initial catalog=11111;persist security info=True;user id=11111;password=xxxxx;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />  
      </connectionStrings>

    проект перестраивал несколько раз. Где может ещё быть прописана \\SQLEXPRESS ?

    22 ноября 2012 г. 10:09
  • Вы показываете строку подключения EntityFramework, а пытаетесь засунуть ее в SqlConnection. Но это так, лирика.

    У меня создается ощущение, что вы смотрите на в тот web.config. Проверьте именно в том приложении которое запускаете, что у вас прописано в файле web.config.

    P.s. Копировать надо в него не всю строку из преведенного вами выше примера, а только вот это:

    data source=11111.mssql.hoster.ru;initial catalog=11111;persist security info=True;user id=11111;password=xxxxx;MultipleActiveResultSets=True

    22 ноября 2012 г. 10:30
    Отвечающий
  • В общем "как надо" не получилось. Пересмотрел всё FAR-ом - нигде другая база не указана. Просто тупо подключился к нужной базе...

    using (SqlConnection connect = new SqlConnection("data source=11111.mssql.hoster.ru;initial catalog=11111;persist security info=True;user id=11111;password=xxxxx;MultipleActiveResultSets=True"))

    22 ноября 2012 г. 11:09
  • Поставьте в начале секции connectionStrings в вэб конфиг файле тэг.

    <clear/>

    Т.е. у вас должно получится следующее:

    <connectionStrings>
    <clear/>
        <add name="11111Entities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=11111.mssql.hoster.ru;initial catalog=11111;persist security info=True;user id=11111;password=xxxxx;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />  
      </connectionStrings>

    После этого у вас по индексу 0 будет получаться именно ваша строка подключения.

    Первоначальная строка - это строка к локальной sql express БД, для того чтобы приложения по умолчанию могли работать с профайлами пользователей и т.п.

    23 ноября 2012 г. 7:32