PROBLEMA CON INSERT DA CODICE

sabato 15 novembre 2008 - 08.38

wally74 Profilo | Newbie

Salve a tutti,
Ho un problema che non riesco a risolvere (vedi thread: ThreadID=26551).
In ultima analisi, da codice riesco ad accedere a excel, e inviare i dati alla tabella di Sql Server 2005 Express.
Faccio questo attraverso un'interfaccia dove l'utente scegli il foglio di excel (sheet1, ...), i dati di excel vengono caricati in una datagridview, dopo di che avviene il trasferimento su Sql Server. Al primo passaggio non ci sono problemi.
Ma quando si sceglie un'altra cartella (sono tutte uguali nella struttura), benché i dati presenti nella datagridview vengano aggiornati, in Sql Server non avviene alcuna modifica; vengono visualizzati i soli dati del primo inserimento.

Ecco il codice di inserimento:

private void button1_Click(object sender, EventArgs e)
{
string sheetName = "[" + txtSheet.Text + "$]";
string odbConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Excel 12.0 Xml;Database=" + dbName + ";HDR=YES";
string odbCmdStr = "SELECT [CAMPO 1], [CAMPO 2] FROM " + sheetName;

System.Data.OleDb.OleDbConnection odbConn = new System.Data.OleDb.OleDbConnection(odbConnStr);
System.Data.OleDb.OleDbCommand odbCmd = new System.Data.OleDb.OleDbCommand(odbCmdStr, odbConn);

System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(odbCmd);

DataTable table = new DataTable("TBL");

odbConn.Open();
adapter.Fill(table);
odbConn.Close();

dataGridView1.DataSource = table;
dbPopulation();
txtSheet.Focus();
txtSheet.SelectAll();
table.AcceptChanges();
}

private void dbPopulation()
{
DateTime[] date = new DateTime[dataGridView1.RowCount - 1];
int[] ctr = new int[dataGridView1.RowCount - 1];
object[] oCells = new object[(dataGridView1.RowCount - 1) * 2];
int i = 0;
int j = 0;
int contaRiga = 0;

foreach (DataGridViewRow row in dataGridView1.Rows)
{
contaRiga++;

foreach (DataGridViewCell cell in row.Cells)
{
oCells[i] = cell.Value;

i++;
}

date[j] = (DateTime)oCells[i - 2];
ctr[j] = Int32.Parse(oCells[i - 1].ToString());

j++;

if (contaRiga == dataGridView1.RowCount - 1)
break;
}

string destinationDB = txtDBDestination.Text;
string connStr = @"Data Source=[datasource]; Initial Catalog=" +destinationDB+ "; User Id=uid; Password=pwd;";
SqlConnection sqlConn = new SqlConnection(connStr);

string queryStr = "INSERT INTO Tbl (Campo1, Campo2, Campo3) VALUES (@Campo1, @Campo2, @Campo3)";

sqlConn.Open();

int id;

try
{
SqlCommand sqlCmd = new SqlCommand();

for (int x = 0; x <= dataGridView1.RowCount - 2; x++)
{
sqlCmd.Connection = sqlConn;

sqlCmd.CommandText = queryStr;
sqlCmd.Parameters.AddWithValue("@Campo1", date[x]);
sqlCmd.Parameters.AddWithValue("@Campo2", txtSheet.Text);
sqlCmd.Parameters.AddWithValue("@Campo3", ctr[x]);
sqlCmd.ExecuteNonQuery();
sqlCmd.Parameters.Clear();
}

sqlCmd.Dispose();
sqlCmd = null;
}
catch (SqlException ex)
{
MessageBox.Show("Errore DB: \n\r" + ex.ToString());
}
finally
{
sqlConn.Close();
}
}

Cos' ho trascurato?

Grazie anticipatamente, wally.
Più conosci, più ti rendi conto di non conoscere e nell'abbondanza della conoscenza non manca la vessazione
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5