jame01 Ответов: 2

Как отправить данные в SQL через класс


привет, ребята..

если бы вы могли пожалуйста, помогите мне с этим,

я пытаюсь отправить некоторые данные через класс, но это не работает
показ этой ошибки
(Параметризованный запрос '(@name nvarchar(4000),@SEX nvarchar (4000))вставить в tbltxt (nam 'ожидает параметр ' @name', который не был указан)
class setdate
        {
            public string _name;
            public string _sex;

            public string name { set { this._name = value; } }
            public string sex { set { this._sex = value; } }
            public setdate()
            {
                using (SqlConnection cn = new SqlConnection(@"Data Source=~"))
                {
                    cn.Open();
                    using (SqlCommand cmd = new SqlCommand("insert into tbltxt(name,SEX)values(@name,@SEX)", cn))
                    {
                        
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = this._name;
                        cmd.Parameters.Add("@SEX", SqlDbType.NVarChar).Value = this._sex;
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("data has been sent");
                        
                    }
                }
             
            }

        }

im использует базу данных sql и приложение windows, net framework 4.5

Что я уже пробовал:

я попытался использовать get set таким образом
public string name { get; set; }
                public string sex { get; set; }

[no name]

Поскольку вы пытаетесь сделать это в конструкторе, ваши значения, вероятно, равны нулю.

jame01

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

[no name]

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

2 Ответов

Рейтинг:
20

#realJSOP

Конструктор предназначен для "конструирования" (отсюда и название - "Конструктор").

Переместите код вставки в отдельный метод и вызовите if после создания экземпляра класса. Если вы настаиваете на том, чтобы этого не делать, измените прототип конструктора, чтобы он принимал необходимые параметры.

Посмотрев на ваш код, я должен сказать, что это дерьмо. Сделайте это так

public static class DateSetter
{
    public static void SetDate(string name, string sex)
    {
        if (string.IsNullOrEmpty(name))
        {
            throw new ArgumentNullException("name");
        }
        if (string.IsNullOrEmpty(sex))
        {
            throw new ArgumentNullException("sex");
        }
        using (SqlConnection conn = new SqlConnection(@"Data Source=~"))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("insert into [databasename].[tbltxt]([name],[SEX])values(@name,@SEX)", conn))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@name", name));
                cmd.Parameters.Add(new SqlParameter("@SEX", sex));
                cmd.ExecuteNonQuery();
                MessageBox.Show("data has been sent");
            }
        }
    }
}


Вам не нужны свойства или переменные в классе.


jame01

спасибо Вам за ваше время ,и мне нравится, когда вы говорите *Я должен сказать, что это дерьмо* вы знаете, что я могу использовать этот добрый метод, и я думаю, что они хороши для использования, но моя точка зрения
здесь использование get и set более понятно для модификации и обслуживания функций..
еще раз большое спасибо

Рейтинг:
1

kkakadiya

Здравствуйте jame01,

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

Спасибо