2013-11-14 3 views
0

Я пытаюсь использовать Sql в visualstudio с помощью C#, но он выдает необработанное исключение типа «System.Data.SqlClient.SqlException», произошедшего в System. Data.dll«System.Data.SqlClient.SqlException» произошел в System.Data.dll

comm = new SqlCommand("INSERT INTO HafizwalaTable(DistrictName, TownName, FarmerName, " + 
"Area, VarietyOfCrop, SowingDate, VisitDate, PestPopulation1, " + 
"PestPopulation2, PestPopulation3, PestPopulation4, PestPopulation5, " + 
"PestPopulation6, PestPopulation7, PestPopulation8, PestPopulation9, " + 
"PestPopulation10, PestPopulation11, PestPopulation12, PesticideUsed, " + 
"PesticideSprayDate, PesticideDosage, CLCV, PlantHeight) " + 
"VALUES @p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11, " + 
"@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19,@p20,@p21,@p22,@p23,@p24)", con); 

comm.Parameters.AddWithValue("@p1",FileReaderDataArray[RowNo, 0]); 

comm.Parameters.AddWithValue("@p2",FileReaderDataArray[RowNo, 1]); 

comm.Parameters.AddWithValue("@p3",FileReaderDataArray[RowNo, 2]); 

comm.Parameters.AddWithValue("@p4", FileReaderDataArray[RowNo, 3]); 

comm.Parameters.AddWithValue("@p5", FileReaderDataArray[RowNo, 4]); 

comm.Parameters.AddWithValue("@p6", FileReaderDataArray[RowNo, 5]); 

comm.Parameters.AddWithValue("@p7", FileReaderDataArray[RowNo, 6]); 

comm.Parameters.AddWithValue("@p8", FileReaderDataArray[RowNo, 7]); 

comm.Parameters.AddWithValue("@p9", FileReaderDataArray[RowNo, 8]); 

comm.Parameters.AddWithValue("@p10", FileReaderDataArray[RowNo, 9]); 

comm.Parameters.AddWithValue("@p11", FileReaderDataArray[RowNo, 10]); 

comm.Parameters.AddWithValue("@p12", FileReaderDataArray[RowNo, 11]); 

comm.Parameters.AddWithValue("@p13", FileReaderDataArray[RowNo, 12]); 

comm.Parameters.AddWithValue("@p14", FileReaderDataArray[RowNo, 13]); 

comm.Parameters.AddWithValue("@p15", FileReaderDataArray[RowNo, 14]); 

comm.Parameters.AddWithValue("@p16", FileReaderDataArray[RowNo, 15]); 

comm.Parameters.AddWithValue("@p17", FileReaderDataArray[RowNo, 16]); 

comm.Parameters.AddWithValue("@p18", FileReaderDataArray[RowNo, 17]); 

comm.Parameters.AddWithValue("@p19", FileReaderDataArray[RowNo, 18]); 

comm.Parameters.AddWithValue("@p20", FileReaderDataArray[RowNo, 19]); 

comm.Parameters.AddWithValue("@p21", FileReaderDataArray[RowNo, 20]); 

comm.Parameters.AddWithValue("@p22", FileReaderDataArray[RowNo, 21]); 

comm.Parameters.AddWithValue("@p23", FileReaderDataArray[RowNo, 22]); 

comm.Parameters.AddWithValue("@p24", FileReaderDataArray[RowNo, 23]); 


comm.ExecuteNonQuery(); 

Плюс все столбцы имеют тип данных NVARCHAR

+2

Прошу вас помиловать нас и использовать параметризованный запрос – Steve

+0

Фактически я новичок, и я не хочу писать другой запрос. – user1056466

+0

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

ответ

0

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

try 
{ 

    string cmdText = "INSERT INTO HafizwalaTable(DistrictName, " + 
     "TownName, FarmerName, Area, VarietyOfCrop, SowingDate, VisitDate, PestPopulation1, " + 
     "PestPopulation2, PestPopulation3, PestPopulation4, PestPopulation5, " + 
     "PestPopulation6, PestPopulation7, PestPopulation8, PestPopulation9, " + 
     "PestPopulation10, PestPopulation11, PestPopulation12, PesticideUsed, " + 
     "PesticideSprayDate, PesticideDosage, CLCV, PlantHeight) " + 
     "VALUES(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14, " 
     "@p15,@p16,@p17,@p18,@p19,@p20,@p21,@p22,@p23,@p24)"; 

    using(SqlConnection con = new SqlConnection(GetConnectionString()) 
    using(SqlCommand comm = new SqlCommand(cmdText, con); 
    { 
     comm.Parameters.AddWithValue("@p1",FileReaderDataArray[RowNo, 0]); 
     comm.Parameters.AddWithValue("@p2",FileReaderDataArray[RowNo, 1]); 
     comm.Parameters.AddWithValue("@p3",FileReaderDataArray[RowNo, 2]); 

     ..... and so on, add the other parameters. all 24 if I have counted them well 

     comm.ExecuteNonQuery(); 
    } 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

Вы должны использовать параметризованный запрос, чтобы избежать проблем в значениях синтаксического анализа (то, что произойдет, если один или несколько FileReaderDataArray строк содержит апостроф?) И избежать проблем с Sql Injection, и, наконец, вы получите чистая командная строка без кавычек, необходимых для конкатенации строк

+0

ok Я параметризировал запрос, как вы сказали, но можете ли вы найти в нем проблему .. какой-то инструмент бросает исключение – user1056466

+0

I необходимо знать точное сообщение об ошибке. Попробуйте добавить try/catch и сообщить нам сообщение об исключении. Будет показано в ответе выше – Steve

+0

Необработанное исключение типа «System.Data.SqlClient.SqlException» произошло в System.Data.dll. Дополнительная информация: Недопустимое имя объекта «HafizwalaTable». – user1056466

Смежные вопросы