2016-11-03 2 views
0

Я пытаюсь вставить несколько строк данных в ms-access SQL с сеансом вставки пользователя. Как только я реализую его, продолжайте показывать ошибку SQL INSERT INTO, я проверил все мои типы данных правильно. Нужна некоторые помогает здесь ..Для Loop insert несколько SQL

Кнопка:

protected void AddClassBtn_Click(object sender, EventArgs e) 
{ 
    string clvl = DropDownList1.SelectedValue; 
    DateTime Sdate = Calendar1.SelectedDate; 
    int Nsession = int.Parse(TextBox1.Text); 
    string Stime = DropDownList2.SelectedValue; 
    string duration = DropDownList3.SelectedValue; 
    string desc = TextBox2.Text; 
    int teacher = int.Parse(DropDownList4.SelectedValue); 
    DBconn.AddClass(clvl, Sdate, Nsession, Stime, duration, desc, teacher); 

}

Метод для вставки SQL:

public static void AddClass(string classlevel, DateTime Sdate,int Nsession, string stime, string duration, string desc, int Tid) 
{ 
    int no = Nsession; 
    for (int i=0; i < no; i++) 
    { 
     OleDbConnection myconnection = GetConnection(); 
     DateTime d = Sdate; 
     d.AddDays(i * 7).ToShortDateString(); 
     string mysql = "INSERT INTO Classes (ClassLevel, StartDate, StartTime, Duration, Desc, TID) VALUES('" + classlevel+"', '"+ d.ToShortDateString()+"'. '"+ stime + "', '"+ duration + "', '"+ desc + "', '"+ Tid + "')"; 
     OleDbCommand mycmd = new OleDbCommand(mysql, myconnection); 
     try 
     { 
      myconnection.Open(); 
      mycmd.ExecuteNonQuery(); 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      myconnection.Close(); 
     } 
    } 
} 
+0

... и что * текст ошибки *? Вы показали почти все в своем вопросе, кроме самой важной части. –

+1

Ваша вставка Into имеет символ '.' вместо символа', 'после параметра даты. –

+0

, если вы используете параметризованный запрос, вам не нужно задавать этот вопрос. – Badiparmagi

ответ

4
VALUES('" + classlevel+"', '"+ d.ToShortDateString() +"'. '"+ stime + "', '"+ duration + "', '"+ desc + "', '"+ Tid + "') 

Вы ., которые должны быть удалены после d.ToShortDateString() и заменить это с ,. Также используйте Command.Parameters, чтобы избежать этих проблем в будущем и защитить вас от Sql Injection.

string mysql = "INSERT INTO Classes (ClassLevel, StartDate, StartTime, Duration, Desc, TID) VALUES(@ClassLevel, @DateString, @Stime, @Duration, @Desc, @TID)"; 
OleDbCommand myCmd = new OleDbCommand(mysql, myconnection); 

myCmd.Parameters.AddWithValue("@ClassLevel", classlevel); 
// my advise is to not store date as string. But you should dicide for yourself! 
myCmd.Parameters.AddWithValue("@DateString", d.ToShortDateString()); 
myCmd.Parameters.AddWithValue("@Stime", stime); 
myCmd.Parameters.AddWithValue("@Duration", duration); 
myCmd.Parameters.AddWithValue("@Desc", desc); 
myCmd.Parameters.AddWithValue("@TID", Tid); 

Учтите что OleDbCommand не назвали концепцию параметров, поэтому вы MUST определить параметры в той же последовательности, как в запросе!

+0

это правильно. дата не форматируется должным образом, когда вы напрямую передаете ее в строковый запрос. –

+0

он все еще показывает «Дополнительная информация: ошибка синтаксиса в инструкции INSERT INTO». после того, как я сменил точку на «,» –

+0

исправлено .. desc зарезервировано слово в доступе благодаря вашей вчерашней информации :) –