using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-O72COGQ;Initial Catalog=ClinicManagementtest;Integrated Security=True"))
{
con.Open();
SqlCommand sc = new SqlCommand("INSERT INTO Patient_Details VALUES(@Id, @Name, @Age, @Contact No, @Address", con);
sc.Parameters.AddWithValue("@Id", textBox1.Text);
sc.Parameters.AddWithValue("@Name", textBox2.Text);
sc.Parameters.AddWithValue("@Contact No", textBox3.Text);
sc.Parameters.AddWithValue("@Address", textBox5.Text);
int o = sc.ExecuteNonQuery();
MessageBox.Show(o + ":Record has been inserted");
con.Close();
}
ответ
Вы делаете много ошибок здесь.
- Во-первых, у вас есть 6 полей в таблице, и если вы не даете список полей, когда вы делаете запрос вставки, то вы должны добавить значения для все 6 полей.
- Во-вторых, у вас есть 5 параметров, но вы добавляете только 4 параметров, и это еще одно исключение.
- И последнее, но не в последнюю очередь синтаксис оператора вставки формально неправильно, потому что нет закрытия parenthesys
Итак, давайте попробуем исправить в меру наших знаний
string cmdText = @"INSERT INTO Patient_Details
(ID, Name, Age, Gender, [Contact No], Address)
VALUES(@Id,@Name,@Age,@Gender,@ContactNo, @Address)"
using (SqlConnection con = new SqlConnection(....))
{
con.Open();
SqlCommand sc = new SqlCommand(cmdText, con);
sc.Parameters.AddWithValue("@Id", textBox1.Text);
sc.Parameters.AddWithValue("@Name", textBox2.Text);
// For the following two fields, add a value or remove
// the parameters and fix the query text above....
sc.Parameters.AddWithValue("@age", ????);
sc.Parameters.AddWithValue("@gender", ????);
sc.Parameters.AddWithValue("@ContactNo", textBox3.Text);
sc.Parameters.AddWithValue("@Address", textBox5.Text);
int o = sc.ExecuteNonQuery();
MessageBox.Show(o + ":Record has been inserted");
}
Кто-то находит забаву в том, чтобы опробовать ответы здесь? – Steve
Как Sankar Радж указал, что вы пропустили a )
в запросе Insert
и параметр @Age
для добавления. Использование пространства в параметре @Contact No
также недопустимо. Вы использовали using
для SqlConnection
. Я предлагаю вам использовать то же самое для SqlCommand
, то вам не нужно явно указывать Dispose
. И снова кажется, что вы не используете try catch
, что вы не смогли идентифицировать проблему.
РЕКОМЕНДУЕМОГО КОД
try{
using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-O72COGQ;Initial Catalog=ClinicManagementtest;Integrated Security=True"))
{
con.Open();
using (SqlCommand sc = new SqlCommand("INSERT INTO Patient_Details VALUES(@Id, @Name, @Age,@Gender, @ContactNo, @Address)", con)){
sc.Parameters.AddWithValue("@Id", textBox1.Text);
sc.Parameters.AddWithValue("@Name", textBox2.Text);
sc.Parameters.AddWithValue("@Gender", textBox3.Text);
sc.Parameters.AddWithValue("@ContactNo", textBox4.Text);
sc.Parameters.AddWithValue("@Age", textBox5.Text);
sc.Parameters.AddWithValue("@Address", textBox6.Text);
int o = sc.ExecuteNonQuery();
MessageBox.Show(o + ":Record has been inserted");
}
}
}catch(Exception ex){
MessageBox.Show(ex.Message);
}
Примечание: Я удалил con.Close()
. Поскольку вы используете оператор using
, он автоматически будет Close
& Dispose
Подключение и освобождение ресурсов, которые он использует.
Вы пропустили скобку в конце команды вставки. – Sankar
Не делай свою жизнь труднее. Не используйте пробелы в именах параметров. И у вас есть 6 полей, вставьте 5 заполнитель параметров, но добавьте только 4 параметра. Вы получили исключение? – Steve
Я бы не стал использовать пробелы в идентификаторах sql вообще ... –