Передача функции в качестве параметра при вводе данных в SQL Server

#c# #sql-server

#c# #sql-сервер

Вопрос:

Я написал GetLoan функцию:

 private void GetLoan(RadioButton radiobutton)
{
        if(radiobutton.Checked)
        {
            MessageBox.Show(radiobutton.Text);
        }
}
 

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

 bookCom = new SqlCommand("UPDATE d_Book SET ISBN = @isbn, Author = @author, Title = @title, Publisher = @publisher, Date = @date, Loan = @loan WHERE ISBN = @isbn ", bookCon);

String ISBN = textISBN.Text;
String Author = textAuthor.Text;
String Title = textTitle.Text;
String Publisher = textPublisher.Text;
String Date = textDate.Text;

GetLoan(rdbtn_Yes); // worked fine
GetLoan(rdbtn_No);  // worked fine

bookCom.Connection = bookCon;
bookCon.Open();

if (bookCon.State == ConnectionState.Open)
{
    bookCom.Parameters.AddWithValue("@isbn", ISBN);
    bookCom.Parameters.AddWithValue("@author", Author);
    bookCom.Parameters.AddWithValue("@title", Title);
    bookCom.Parameters.AddWithValue("@publisher", Publisher);
    bookCom.Parameters.AddWithValue("@date", Date);
    bookCom.Parameters.Add("@loan", SqlDbType.Char).Value = GetLoan; // didn't work at all
}
 

Есть ли какой-нибудь способ, которым я мог бы приступить GetLoan к работе?

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

1. Вы уверены, что это вообще возможно?

2. Вы хотите показать поле ввода для пользователя, чтобы получить сумму кредита? потому что ваш код теперь ничего не делает, кроме отображения текста переключателя, и он не будет компилироваться, потому что вы передаете метод GetLoan как переменную, а не как функцию

3. Да, у меня уже есть поле ввода, я хочу использовать мои радиокнопки Yes / No для сохранения в виде символа или, возможно, в виде строки для моего Sql-соединения @HaithamShaddad

4. возврат void — вы ничего не возвращаете из функции. Похоже, вы хотите, чтобы логика ‘Y’ ‘N’ в функции возвращала символ. Убедитесь, что тип параметра действительно является char, а не varchar .

Ответ №1:

Вы должны указать возвращаемый тип в функции:

     private string GetLoan(RadioButton radiobutton)
    {
        if (radiobutton.Checked)
        {
            return "yes";
        }
        else
        {
            return "no";
        }
    }
 

Или как bool в одной строке кода:

     private bool GetLoan(RadioButton radiobutton)
    {
        return radiobutton.Checked;
    }
 

И тогда вам всегда нужно передавать RadioButton в качестве параметра. Итак, измените

 bookCom.Parameters.Add("@loan", SqlDbType.Char).Value = GetLoan;
 

Для

 bookCom.Parameters.Add("@loan", SqlDbType.Char).Value = GetLoan(rdbtn_Yes);
 

Но почему бы не упростить и просто проверить, какой из них выбран:

 String Loan = "no";
if (rdbtn_Yes.Checked == true)
{
    Loan = "yes";
}
bookCom.Parameters.Add("@loan", SqlDbType.Char).Value = Loan;
 

Ответ №2:

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

 private string GetLoan(CheckBox chkBxGetLoan)
{
    //returns string value as output.
    return chkBxGetLoan.Checked ? "Y" : "N";
}
 

или

 private char GetLoan(CheckBox chkBxGetLoan)
{
    //returns char value as output.
    return chkBxGetLoan.Checked ? 'Y' : 'N';
}