2012-03-26 20 views
0

は、私がこの文は私に問題を与えている理由を把握するように見えることはできません:SQL [エラー]:クエリの解析中にエラーが発生しました。 [トークンの行番号= 1、= 44、トークンエラーに=オフセットトークンライン - ]

sqlCommand.CommandText = @"INSERT INTO Fulfilled_Shipments_Data (amazon-order-id) VALUES " + lines[0]; 

私はエラーを取得しています

[Error]: There was an error parsing the query. [ Token line number = 1,Token line offset = 44,Token in error = - ] 

amazon-order-idの - を指します。

Visual Studio内からSQLを実行すると同じエラーが発生しますが、その列名を使用して既存のデータを照会できます。

私はこれがSQLの達人のための些細な問題だと確信していますが、私は何か助けに感謝するように私の頭を傷つけています!

+0

最初のエラーのために働く 'VALUES( "+ライン[0] +")" ' –

答えて

5

のデータ型に応じて、それが持っているマイナス(ので、あなたがamazon-order-idをエスケープする必要がありますダッシュ)記号。それは[amazon-order-id]次のようになります。

また
...INSERT INTO Fulfilled_Shipments_Data ([amazon-order-id])... 

、値は括弧内に次のようになります。VALUES (" + lines[0]+")";

最終バージョン:

sqlCommand.CommandText = @"INSERT INTO 
Fulfilled_Shipments_Data ([amazon-order-id]) 
VALUES (" + lines[0]+")"; 
+0

、行に含まれているが、データをしようとする場合があります[0]が含まカラム名が有効でない[ノード名(もしあれば)=、カラム名= S01-8XXXXXX-XXXXXXX –

+0

[]は、カラムをエスケープするために使用されます。 lines [0]が文字列の場合、 '... VALUES( '" + lines [0] + "')" 'という単一引用符で囲む必要があります。 'lines [0]'に特殊文字がなく、必要に応じてエスケープするようにする必要もあります。 – a1ex07

+0

直接クエリに値を入れるのではなく、パラメータ(http://msdn.microsoft.com/en-us/)を使用してください。ライブラリ/ system.data.sqlclient.sqlcommand.parameters.aspx)。この方法では、値を手動でエスケープする必要はありません。 – a1ex07

2

私はあなたのSQL構文は次のようになりますと思う:

sqlCommand.CommandText = @"INSERT INTO Fulfilled_Shipments_Data (amazon-order-id) VALUES ('" + lines[0] + "')"; 

OR

sqlCommand.CommandText = @"INSERT INTO Fulfilled_Shipments_Data (amazon-order-id) VALUES (" + lines[0] + ")"; 

amazon-order-id

1

はこれらを試してみてください。

sqlCommand.CommandText = @"INSERT INTO Fulfilled_Shipments_Data (amazon-order-id) VALUES ('" + lines[0]+"')"; 

OR

sqlCommand.CommandText = @"INSERT INTO Fulfilled_Shipments_Data ([amazon-order-id]) VALUES ('" + lines[0]+"')"; 
関連する問題