public static void WriteData(string colName,string data)
{
using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\""))
{
// string query = String.Format("INSERT INTO [DataSet$]({0}) VALUES ({1})",colName, data);
string query = String.Format("INSERT INTO [DataSet$]({0}) VALUES ({1})", colName, data);
cn.Open();
OleDbCommand cmd = new OleDbCommand(query, cn);
cmd.Parameters.AddWithValue("@colName", colName);
cmd.Parameters.AddWithValue("@data", data);
cmd.ExecuteNonQuery();
cn.Close();
cn.Dispose();
}
}
答えて
動的クエリ生成とクエリーパラメータのミキシングを実行しようとしています。 コマンドパラメータを使用して、クエリの列名を設定することはできません。パラメータは、クエリに値を渡すためにのみ使用されます。
string.Format
をクエリに使用するには、クエリにデータを渡すためにのみコマンドパラメータを使用します。
public void WriteData(string colName, string data)
{
using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\""))
{
string query = string.Format("INSERT INTO [DataSet$] ({0}) VALUES (@data)", colName);
// The query variable will have following value assuming colName=token
//INSERT INTO [DataSet$] (token) VALUES (@data)
cn.Open();
//Now use OleDbCommand to pass value of @data to the query.
OleDbCommand cmd = new OleDbCommand(query, cn);
cmd.Parameters.AddWithValue("@data", data);
cmd.ExecuteNonQuery();
cn.Close();
}
}
これは、問題の解決に役立ちます。
public static void UpdateData(string keyName,string colName,string data)
{
using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\""))
{
// string query = String.Format("INSERT INTO [DataSet$]({0}) VALUES ({1})",colName, data);
connection.Open();
string commandString = String.Format("UPDATE [DataSet$] SET colName ='{0}' WHERE keyName = '{1}'",@data,@keyName);
OleDbCommand cmd = new OleDbCommand(commandString, connection);
cmd.Parameters.AddWithValue("@data", data);
cmd.Parameters.AddWithValue("@keyName", keyName);
connection.Close();
connection.Dispose();
}
}
}
あなたは私の答えと同じアプローチに従う必要があります。 string.formatを使用して列名とコマンド・パラメーターを入力し、値を入力します。 –
ここにキー名は何ですか?それは列名ですか?それに価値がある必要があります。これを行う必要があるユースケースについて説明できますか?このコードには、最初のコードと同じ問題があります。 –
keyname、colname、およびdataのサンプル値を共有できますか? –
- 1. クエリ式の構文エラー(演算子がありません)
- 2. 構文エラー(クエリ式で演算子がありません)
- 3. mysqlクエリの構文エラー(演算子がありません)
- 4. 構文MS Accessでのクエリ式のエラー(演算子がありません)
- 5. C#VS2005クエリ式の構文エラー(演算子がありません)
- 6. クエリの構文エラー(演算子が見つかりません)
- 7. 構文エラークエリ式内(演算子がありません) - MS-アクセス
- 8. msアクセスマクロビルダのクエリ式に構文エラー(演算子がありません)があります
- 9. 構文エラー(演算子がありませんが)
- 10. 構文エラー(演算子がありません)
- 11. 実行時エラー '3075':クエリ式の構文エラー(演算子がありません) '[Order Number] ='
- 12. クエリ合計式vb netの演算子がありません
- 13. クエリの式でランタイムエラー '3075'の構文エラー(演算子がありません)を取得しています
- 14. クエリ式に構文エラー(演算子がありません)が表示されるCONVERTおよびCAST
- 15. [OleDbException(0x80040e14):クエリ式 'PCName = <%#Eval(' PCName ')%>'の構文エラー(演算子がありません)。
- 16. odbc_exec():SQLエラー:[Microsoft] [ODBC Microsoft Access Driver]構文エラー(演算子がありません)
- 17. アクセス:構文エラー(演算子がありません)Form_Loadの場合のみ
- 18. vba sql文のエラー "演算子がありません"
- 19. ==>構文エラー: 'Id'演算子の後にオペランドがありません
- 20. クエリ式の構文エラー(不足している演算子)
- 21. 単項演算子 ' - 'の後に式がありません
- 22. 式内に演算子がありません
- 23. 2つのデータテーブルでINNER JOINを実行しているときにvb.netのクエリ式に構文エラー(演算子がありません)があります
- 24. Prologの構文エラー:演算子が
- 25. 構文エラー:演算子に割り当てることができません
- 26. 構文エラー:演算子に割り当てることができません
- 27. エラー:演算子[]の一致がありません
- 28. パイソン:三項演算子の構文エラー
- 29. MS-Accessクエリの構文エラー(不足している演算子)
- 30. "System.Data.OleDb.OleDbException: '構文のエラーがUPDATEステートメントでエラー"
私はあなたが何を求めているのかわかりませんが、そのままのコードはSQLインジェクション攻撃に対して脆弱であることに注意してください。 – AKX
シートにデータを挿入することができず、上記の例外がスローされています。 – darsi567
私はc#とsqlを初めて使用しています。いずれかの上記の構文エラーで助けてください? – darsi567