 <p>I think your</p> <pre><code>"...VALUES('sheetname" + dt.Rows[0][j].ToString() + "' ) </code></pre> <p>should be</p> <pre><code>"...VALUES('sheetname', '" + dt.Rows[0][j].ToString() + "' ) </code></pre> <p>since you try to insert two values but you didn't seperate them with a comma.</p> <p>But as a better way, use <a href="http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/" rel="nofollow">parameterized queries</a>. This kind of string concatenations are open for <a href="http://en.wikipedia.org/wiki/SQL_injection" rel="nofollow">SQL Injection</a> attacks.</p> <pre><code>var command = new SqlCommand(@"INSERT INTO [Obj CA] (sheetname, [Rayon]) VALUES('sheetname', @rayon"), con); for (int i = 2; i &lt; dt.Rows.Count; i++) { for (int j = 1; j &lt; dt.Columns.Count; j += 3) { command.Parameters.Clear(); command.Parameters.AddWithValue("@rayon", dt.Rows[0][j].ToString()); command.ExecuteNonQuery(); } } </code></pre> <p>By the way, since I didn't know your column types, I used <code>AddWithValue</code> as an example but you don't. <a href="http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/" rel="nofollow">This method <em>may</em> generate unexpected results sometimes</a>. Use <code>Add</code> overload to specify your parameter type and it's size.</p> <p>Also I strongly suspect you should change your column definition order as well like <code>(sheetname, [Rayon])</code> in your <code>INSERT</code> statement.</p>