Как добавить статический параметр в запрос SQL с помощью SqlCommand C # - PullRequest
0 голосов
/ 22 февраля 2019

Можно ли добавить статический параметр в запрос SQL, используя SqlCommand в C #?

Я пытаюсь либо INSERT, либо UPDATE таблица базы данных, в зависимости от того, уже клиентсуществует.

Я пытаюсь сделать UpdateType = 1, если INSERT выполнено ИЛИ 2, если UPDATE выполнено.

Есть ли способ удалить динамический параметр @UpdateType и просто статическое значение 1 или 2 для запросов INSERT или UPDATE?

Вот пример запроса:

string sqlQuery = "IF NOT EXISTS(SELECT 1 FROM Client WHERE [ClientID] =" +  
    "@ClientID) " +  
    "INSERT INTO Client (ClientId, LastName, FirstName, UpdateType)" + 
    "VALUES (@ClientID, @LastName, @FirstName, @UpdateType)" +
    "ELSE " +  
    "UPDATE Client " + 
    "SET [ClientID] = @ClientID, [LastName] = @LastName, [FirstName] = "+ 
    "@FirstName, [UpdateType] = @UpdateType"+
    "WHERE ClientID = ClientID;";

using (SqlCommand MyCommand = new SqlCommand(sqlQuery, SQLConn))
{
    MyCommand.Parameters.Add("@ClientID", SqlDbType.VarChar);
    MyCommand.Parameters.Add("@LastName", SqlDbType.VarChar);
    MyCommand.Parameters.Add("@FirstName", SqlDbType.VarChar);
    MyCommand.Parameters.Add("@UpdateType", SqlDbType.Int);

    try
    {
        SQLConn.Open();

        foreach (DataRow row in SourceData.Rows)
        {
            MyCommand.Parameters["@ClientID"].Value = row["ClientId"].ToString();
            MyCommand.Parameters["LastName"].Value = row["LastName"].ToString();
            MyCommand.Parameters["@FirstName"].Value = row["FirstName"].ToString();
            MyCommand.Parameters["@UpdateType"].Value = Convert.ToInt32(row["UpdateType"]);

            MyCommand.ExecuteNonQuery();
        }
     }
     catch
     {
         ....
     }    
}

Любая помощь по этому вопросу очень важна.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете сделать свой код чище, разрешив многострочную строку с символом @.

Если запись не существует, вставьте ее, в противном случае обновите ее, установив значения для записи, где ClientId = @ClientId.

И вы, конечно, не захотите делать то, что делает ваш запрос.Обновление таблицы с использованием предложения where WHERE ClientId = ClientId, по сути, обновит каждую строку в таблице.

        string sqlQuery = @"
IF NOT EXISTS(SELECT 1 FROM Client WHERE [ClientID] = @ClientID)
BEGIN
    INSERT INTO Client (ClientId, LastName, FirstName, UpdateType)
    VALUES (@ClientID, @LastName, @FirstName, 1)
END
ELSE
BEGIN
    UPDATE Client SET 
        [LastName] = @LastName,
        [FirstName] = @FirstName,
        [UpdateType] = 2
    WHERE
        ClientID = @ClientID;//<<<fix your query!!!!!
END;"

using (SqlCommand MyCommand = new SqlCommand(sqlQuery, SQLConn))
{
    MyCommand.Parameters.Add("@ClientID", SqlDbType.VarChar);
    MyCommand.Parameters.Add("@LastName", SqlDbType.VarChar);
    MyCommand.Parameters.Add("@FirstName", SqlDbType.VarChar);

    try{
        SQLConn.Open();
        foreach (DataRow row in SourceData.Rows)
        {
            MyCommand.Parameters["@ClientID"].Value = row["ClientId"].ToString();
            MyCommand.Parameters["@LastName"].Value = row["LastName"].ToString();
            MyCommand.Parameters["@FirstName"].Value = row["FirstName"].ToString();
        }
     }catch{
         ....
     }    
}
0 голосов
/ 22 февраля 2019

Да, просто удалите @UpdateType из sql и замените его на 1 или 2

...
"(@ClientID, @LastName, @FirstName, 1)" +
"ELSE " +  
"UPDATE Client " + 
"SET [ClientID] = @ClientID, [LastName] = @LastName, [FirstName] = "+ 
"@FirstName, [UpdateType] = 2"+
...

Удалите оставшуюся часть кода, который упоминает это тоже:

MyCommand.Parameters.Add("@UpdateType", SqlDbType.Int);

И

MyCommand.Parameters["@UpdateType"].Value = Convert.ToInt32(row["UpdateType"]);

PS - использование @ strings в c # позволяет вставлять новые строки в строковую константу, что делает ее намного более читабельной:

var sql = @"select *
  from
    Table
  where
    Blah = 1";

, чем все эти символы "+"над местом.Возможно, вам следует поместить строки sql в файл ресурсов или что-то подобное.Или хранимая процедура

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