Почему мой запрос не выполняется в моем коде, в то время как он нормально выполняется в обычном SQL? - PullRequest
0 голосов
/ 27 мая 2019

Я столкнулся с проблемой при создании проекта для школы, мы должны импортировать данные из файла .txt в нашу базу данных C #.Я думал, что понял это, но мои строки вставки не вставляли данные в мои таблицы.Итак, в конце я попытался вставить только 1 строку со всеми записанными значениями, и он все равно не вставит данные в базу данных.

Я попробовал опцию «Новый запрос», щелкнув правой кнопкой мыши намоя таблица и скопированная строка вставки из моего кода, и это сработало просто отлично, поэтому я не знаю, почему строка в коде не работает.

class Program
{
    static void Main(string[] args)
    {
        string connectionString = @"Data Source= (LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|BazaPRO2.mdf;Integrated Security=True;Connect Timeout=30";
        SqlConnection dataConnection = new SqlConnection(connectionString);
        string q;
        dataConnection.Open();
        q = "INSERT INTO Sola(SolaID,Naziv,Naslov,Kraj,Posta,Telefon,Eposta) VALUES(1,'Test','Test','Test',1000,'Test','Test')";
        SqlCommand dataCommand = new SqlCommand(q, dataConnection);

        try
        {
            dataCommand.ExecuteNonQuery();
            Console.WriteLine("Success");
            dataConnection.Close();
        }
        catch { Console.WriteLine("Fail"); }
    }
}

Я попытался вставить запрос на выполнениестрока в блоке try, и на моем экране выводится «Success», но строка вставки НЕ выполняется.

1 Ответ

2 голосов
/ 27 мая 2019

Проверьте возвращаемое значение dataCommand.ExecuteNonQuery(); (целочисленное значение), если оно возвращает -1, что-то пошло не так (, например, откат транзакции ). Если 0, строки не были затронуты.

int return_value = dataCommand.ExecuteNonQuery();
if(return_value > 0)
   //goood :)
else
   //something wrong :(

EDIT :

Кстати, лучше использовать команды после их использования, как показано ниже:

string connectionString = @"Data Source= (LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|BazaPRO2.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection dataConnection = new SqlConnection(connectionString);
dataConnection.Open();
string q = "INSERT INTO Sola(SolaID,Naziv,Naslov,Kraj,Posta,Telefon,Eposta) VALUES(1,'Test','Test','Test',1000,'Test','Test')";
using(SqlCommand dataCommand = new SqlCommand(q, dataConnection))
{
    try
    {
        dataCommand.ExecuteNonQuery();
        Console.WriteLine("Success");
    }
    catch { Console.WriteLine("Fail"); }
}
dataConnection.Close();

РЕДАКТИРОВАТЬ2 : С учетом вопросов в комментариях.

Что вы говорите, написав |DataDirectory| - это "поиск в пути приложения для этой базы данных" , если вы отлаживаете ваше приложение, это означает, что оно ищет базу данных в выходной папке отладки. Если вы не хотите указывать базу данных из каталога приложений с относительным / абсолютным путем (см. Метод AppDomain.SetData) или копировать базу данных в каталог приложения ... вам сложно ответить, не зная вашей цели:)

Если быть более точным, перед инициализацией SqlConnection вызовите следующий код:

AppDomain.SetData("DataDirectory", "C:\\TEST\\");

Чтобы установить |DataDirectory|, указывая путь к вашей базе данных.

...