2012-03-06 2 views
0

Я хочу импортировать данные из таблицы Excel в базу данных SQL Server (2008). Я успешно протестировал код для получения данных из файла xls. Однако я не могу вставить эти данные в таблицу db. Вот часть кода:asp.net вставка данных в SQL Server db in while loop

 while (ctecka.Read()) 
     { 
      exJmeno = ctecka[0].ToString(); 
      exPrijmeni = ctecka[1].ToString(); 
      Response.Write(exJmeno + " " + exPrijmeni + " "); 
      pridano = vlozSQL.ExecuteNonQuery(); 
     } 

ctecka является объектом DbDataReader и содержит данные из первенствовать листа

exJmeno и exPrijmeni представляют собой строки и данные из столбцов вставляются там

Задача:

Response.write пишет на странице данные мне нужно

vlozSQL.ExecuteNonQuery игнорирует данные (exJmeno и exPrijmeni) и вставляет пустые столбцы в таблицу в базе данных

здесь несколько определений:

string InsertSQL = "INSERT INTO users (name, surname) VALUES (@name,@surname)"; 
vlozSQL.Parameters.AddWithValue("@name", exJmeno); 
vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni); 

EDIT

string exJmeno = ""; 
    string exPrijmeni = ""; 
    string InsertSQL = "INSERT INTO users (name, surname) VALUES (@name,@surname)"; 
    SqlConnection sqlconn = new SqlConnection(SQLpripoj); 
    SqlCommand vlozSQL = new SqlCommand(InsertSQL, sqlconn); 
    vlozSQL.Parameters.AddWithValue("@name", exJmeno); 
    vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni); 

    try 
    { 
     spojeni.Open(); 
     DbDataReader ctecka = prikaz.ExecuteReader(); 

     sqlconn.Open(); 
     while (ctecka.Read()) 
     { 
      exJmeno = ctecka[0].ToString(); 
      exPrijmeni = ctecka[1].ToString(); 
      Response.Write(exJmeno + " " + exPrijmeni + " "); 
      pridano = vlozSQL.ExecuteNonQuery(); 
     } 
    } 
    finally 
    { 
     spojeni.Close(); 
     sqlconn.Close(); 
     Label2.Text = pridano.ToString(); 
    } 
+0

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

ответ

1

Поскольку строки a re, не изменяемый в C#, ваши назначения в цикле фактически не изменят параметры, вам придется добавлять их каждый раз. Вам нужно будет что-то сделать;

while (ctecka.Read()) 
{ 
    exJmeno = ctecka[0].ToString(); 
    exPrijmeni = ctecka[1].ToString(); 
    Response.Write(exJmeno + " " + exPrijmeni + " "); 
    vlozSQL.Parameters.Clear(); 
    vlozSQL.Parameters.AddWithValue("@name", exJmeno); 
    vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni); 
    pridano = vlozSQL.ExecuteNonQuery(); 
} 
+0

GREAT !!! Работает как шарм !! – polohy

1

ход эта часть кода в то время как петля

vlozSQL.Parameters.AddWithValue("@name", exJmeno); 
vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni); 

напр:

while (ctecka.Read()) 
    { 
     exJmeno = ctecka[0].ToString(); 
     exPrijmeni = ctecka[1].ToString(); 
     vlozSQL.Parameters.AddWithValue("@name", exJmeno); 
     vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni); 
     Response.Write(exJmeno + " " + exPrijmeni + " "); 
     pridano = vlozSQL.ExecuteNonQuery(); 
    } 
+0

спасибо за ответ, однако строка vlozSQL.Parameters.Clear(); является существенным (Иоахим Исакссон) – polohy