C # - Как отправить вставку с @Parameters в класс подключения к базе данных - PullRequest
0 голосов
/ 04 января 2019

Возникла небольшая проблема с правильной работой вставки. Когда я запускаю вставку в одном и том же методе, она работает безупречно ... однако, когда я пытаюсь отправить инструкцию Insert в мой новый класс Connection (который я буду обрабатывать все запросы к базе данных), я получаю следующую ошибку.

Примечание. Я использую C # и Microsoft SQL Server.

System.Data.SqlClient.SqlException (0x80131904): Must declare the scalar variable "@CollectionGroupID".

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

Вот мой метод AddGame:

public static void AddGame(int gameId)
    {

        string statement = "INSERT INTO Collection (CollectionGroupID, SharedID, UserID, GameID, Owned, Favorited, WishList, DeletedIndicator, AddUser, AddDate, ModUser, ModDate) VALUES (@CollectionGroupID, @SharedID, @UserID, @GameID, @Owned, @Favorited, @WishList, @DeletedIndicator, @AddUser, @AddDate, @ModUser, @ModDate)";

        using (SqlCommand cmd = new SqlCommand())
        {

            cmd.Parameters.AddWithValue("@CollectionGroupID", "0");
            cmd.Parameters.AddWithValue("@SharedID", "0");
            cmd.Parameters.AddWithValue("@UserID", "0"); 
            cmd.Parameters.AddWithValue("@GameID", gameId);
            cmd.Parameters.AddWithValue("@Owned", "Y");
            cmd.Parameters.AddWithValue("@Favorited", "N");
            cmd.Parameters.AddWithValue("@WishList", "N");
            cmd.Parameters.AddWithValue("@DeletedIndicator", "N");
            cmd.Parameters.AddWithValue("@AddUser", "test/admin");
            cmd.Parameters.AddWithValue("@AddDate", DateTime.Now);
            cmd.Parameters.AddWithValue("@ModUser", "test/admin");
            cmd.Parameters.AddWithValue("@ModDate", DateTime.Now);


            Connection.Open();
            Connection.Statement(statement);
            Connection.Close();


        }
    }

А вот мой метод Statement в моем классе Connection

public static void Statement(string sql)
    {
        Console.WriteLine("Attempting to submit data to the database...");

        try
        {
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.ExecuteNonQuery();
        }
        catch (SqlException e)
        {
            Console.WriteLine(e);
        }

    }

Я чувствую, что, возможно, я упускаю простое решение. Любая помощь приветствуется!

-Travis W.

1 Ответ

0 голосов
/ 04 января 2019

Параметр команды определен в SqlCommand в вашем AddGame методе

вы передаете необработанный Sql методу Statement, а внутри метода вы создаете еще один SqlCommand без определенного параметра. Вот почему параметры не передаются.

Вы должны просто сделать

using (SqlConnection connection = new SqlConnection(connectionString))
{
//OR using (SqlConnection connection = Connection.Open())
//If you want to keep your Connection class to avoid having to pass in connection string.  
    using (SqlCommand cmd = new SqlCommand(statement, connection))
    {
        ...
        cmd.ExecuteNonQuery ()
    }
}

внутри вашего AddGame метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...