Вызов хранимой процедуры, странная ситуация, с которой я сталкиваюсь

Использование Visual Studio 2008, С#

В течение последних 2 дней я столкнулся с проблемой, поэтому я решил спросить здесь. У меня есть эта хранимая процедура в моей базе данных под названием StoredProcedure1:

ALTER PROCEDURE dbo.StoredProcedure1
   @ID int,
   @Username varchar(10),
   @Pass varchar(10),
   @Status varchar(10)
AS
   INSERT INTO tPasswords(ID, fUsername, fPassword, fStatus)
   Values (@ID, @Username, @Pass, @Status)

   RETURN 

Я просто добавляю строку в свою таблицу.

Когда я выполняю процедуру из проводника сервера в Visual Studio, все проходит гладко, и когда я вижу данные в своей базе данных, я вижу новую строку, которую я только что добавил.

Проблема в том, что я пытаюсь запустить процедуру внутри своей программы.

Итак, для теста внутри пустой формы я создал кнопку и:

using System.Data.Sql;
using System.Data.SqlClient;

private void button1_Click(object sender, EventArgs e)
{
    string a = "Andreas"; 
    string b = "Andreas2"; 
    string c = "Andreas3"; 
    int _id = 10;
     SqlConnection connection = new SqlConnection(
        Properties.Settings.Default.dPasswordsConnectionString);
    SqlCommand cmd = new SqlCommand(
        "StoredProcedure1", connection);
    connection.Open();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandTimeout = 600;
    cmd.Parameters.Add("@ID", _id);
    cmd.Parameters.Add("@Username", a);
    cmd.Parameters.Add("@Pass", b);
    cmd.Parameters.Add("@Status", c);

    int i = cmd.ExecuteNonQuery();

    connection.Close();
}

Когда я нажимаю эту кнопку, у меня нет никаких ошибок или чего-то еще, когда я нажимаю ее дважды, это вызывает ошибку об одном и том же первичном ключе, поэтому процедура работает.

Но когда я захожу в свою базу данных, я не вижу, что новые данные были вставлены.

На самом деле это моя проблема, я не могу писать в свою базу данных из своей программы.


person Andreas Oxinos    schedule 24.02.2012    source источник
comment
Какая у вас строка подключения? Похоже, вы находитесь в незавершенной транзакции.   -  person btlog    schedule 24.02.2012
comment
Источник данных=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dPasswords.mdf;Integrated Security=True;Экземпляр пользователя=True   -  person Andreas Oxinos    schedule 24.02.2012
comment
Пожалуйста, не добавляйте к названиям префикс C# и тому подобное. Вот для чего нужны теги.   -  person John Saunders    schedule 24.02.2012
comment
Можете ли вы прикрепить файл базы данных (.mdf) к экземпляру SQL Server, используя SQL Server Mgmt Studio (Express)?? Дайте ему логическое имя, а затем используйте строку подключения к присоединенной базе данных вместо того, чтобы возиться с файлом базы данных. Весь этот AttachDbFilename= материал сломан и беспорядок - не используйте его! Это просто вызывает горе (и тонны сообщений здесь, на SO.....)   -  person marc_s    schedule 24.02.2012
comment
Я почти уверен, что ваша хранимая процедура выполняется нормально, но вы просматриваете неправильный файл .MDF для результатов и, следовательно, не видите их......   -  person marc_s    schedule 24.02.2012
comment
См. мой ответ на этот другой вопрос SO по той же теме Буквально несколько дней назад.....   -  person marc_s    schedule 24.02.2012


Ответы (1)


я предполагаю, что вы пытаетесь установить первичный ключ в своей хранимой процедуре.

вы должны позволить SQL установить его для вас.

Я предполагаю, что @ID - это ваш первичный ключ... удалите этот код и код из вашего процесса, в который вы вставляете значение в строку.

вы должны убедиться, что ваше определение столбца настроено на автоматическое создание их для вас.

person Muad'Dib    schedule 24.02.2012
comment
Действительно, @ID — это мой первичный ключ, я исправил эту проблему сейчас, но основная проблема, как я описал выше, заключается в том, что я не могу добавить какие-либо данные в свою базу данных из своего приложения. - person Andreas Oxinos; 24.02.2012
comment
Когда я запускаю StoreProcedure из проводника сервера, он правильно добавляет данные, но из моей программы нет. - person Andreas Oxinos; 24.02.2012
comment
Просто обновите таблицу и проверьте, вставлены ли данные. Говорю это потому, что даже я изначально голову сломал. Беспокоит, что данные не вставляются даже тогда, когда они на самом деле были. Исправьте проблему с первичным ключом, как предложил Муад'Диб. - person Manjunath K Mayya; 24.02.2012