вызов хранимой процедуры в project и проверка наличия существующей записи c#

#c# #.net #stored-procedures #visual-studio-2017

#c# #.net #хранимые процедуры #visual-studio-2017

Вопрос:

У меня есть эта хранимая процедура:

 Create procedure [dbo].[Save_Customer]

    @CustomerID int output,
    @CustomerName nvarchar (150)

    

as
    if (select count(*) FROM dbo.CustomersTbl WHERE CustomersTbl.CustomerID= @CustomerID)>0
    BEGIN

        return -3
    END 
ELSE    
   if (select count(*) FROM dbo.CustomersTbl WHERE CustomersTbl.CustomerName= @CustomerName)=0
     BEGIN
       insert into CustomersTbl
                (CustomerID,CustomerName)
                values
                (@CustomerID,@CustomerName)
                return -2
     END
            else
            begin
            return -4
            
    END
 

в проекте у меня есть класс с именем DataAccessLayer, у этого вызова есть этот метод для добавления, обновления или удаления :

 public void ExecuteCommand(string stored_procedure, SqlParameter[] param)
{
    SqlCommand sqlcmd = new SqlCommand();
    sqlcmd.CommandType = CommandType.StoredProcedure;
    sqlcmd.CommandText = stored_procedure;
    sqlcmd.Connection = sqlconnection;
    if (param != null)
    {
        sqlcmd.Parameters.AddRange(param);
    }
    sqlcmd.ExecuteNonQuery();
}
 

Теперь я создал еще один слой с именем папка бизнес-уровня, содержащий класс с именем CLS_AddUpdateDelete, и в нем есть этот код для сохранения клиента :

 public void Save_Customers(int Customer_Id, string Customer_Name)
{
    Data_Layer.DataAccessLayer DAL = new Data_Layer.DataAccessLayer();
    DAL.Open();
    SqlParameter[] param = new SqlParameter[2];
    param[0] = new SqlParameter("@CustomerID", SqlDbType.Int);
    param[0].Value = Customer_Id;
    param[1] = new SqlParameter("@CustomerName", SqlDbType.NVarChar,150);
    param[1].Value = Customer_Name;
    DAL.ExecuteCommand("Save_Customer", param);
    DAL.Close();
}  
 

в форме у меня есть кнопка :

 private void button3_Click(object sender, EventArgs e)
{
    if (textBox3.Text.Trim() == "")
    {
        MessageBox.Show("Please Enter Customer Name");
        return;
    }
    Saving.Save_Customers(Convert.ToInt32(textBox4.Text.Trim()),textBox3.Text.Trim());
    MessageBox.Show("Added Successfully", "Add Customer", MessageBoxButtons.OK, MessageBoxIcon.Information);
    ClearControls.ResetAllControls(this);
    dataGridView2.DataSource = GetInfo.GetAllFroDataGridView();
    DataTable tbl = GetLastRecord.GetLastRecord();
    textBox4.Text = (Convert.ToInt32(tbl.Rows[0][0])).ToString();
}
 

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

Заранее спасибо 🙂

Ответ №1:

сделайте что-то подобное при нажатии кнопки

 Boolean emp_exist = false;
string query = select * from CustomersTbl where CustomerID = '" yourid "';
SqlCommand myCommand0 = new SqlCommand(query, con);
SqlDataReader myreader = myCommand0.ExecuteReader();
while (myreader.Read())
{   
 emp_exist = true; 
}
if (!emp_exist)
{
   //your code  
}  
else
{
 //add your message employee exist 
}
 

Комментарии:

1. Не могли бы вы, пожалуйста, изменить приведенный выше код?

2. проверьте, теперь добавьте свою таблицу и идентификатор в запрос и добавьте свой код внутри if (!emp_exist) и сообщение внутри части else надеюсь, это поможет

Ответ №2:

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

Комментарии:

1. я не могу опубликовать код, но он не работает: (

Ответ №3:

Перед выполнением хранимой процедуры вы можете выполнить «оператор выбора» и вызвать SqlCommand.ExecuteScalar Method , чтобы проверить, существует ли элемент в базе данных. Если она не существует, возвращаемое значение метода будет «null».

Вы можете обратиться к следующему коду.

 string connString = @"connection string";
string sql = "select * from CustomersTbl where CustomerID='"   textBoxID.Text   "'";
using (SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand cmd = new SqlCommand(sql, conn);
    try
    {
        conn.Open();
        if(cmd.ExecuteScalar() == null)
            Console.WriteLine("not exist");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}