2012-01-30 19 views
2

error screenshotasp.netのデータベースにデータを挿入できませんか?

データをデータベースに挿入するときにエラーが発生しました。クエリは正常です。私は何がうまくいかないのか分からない。

+7

必須:[SQLインジェクション]に対するあなたのコードを保護してください(http://en.wikipedia.org/wiki/SQL_injection)。それは*とても*危険です。 – jadarnel27

+0

助けてくれてありがとう – vini

答えて

4

あなたは()[]が欠落しています

Insert into [User] (Name, Uid) values ('"+tb1.Text+"', '"+tb1.Text+"')"; 

注意予約語ユーザーの周りに '[' と ']' を使用すること。そして、@marc_sのように述べている:詳細は

チェックTHIS「一つは本当にSQL Injectionを避けるために、パラメータ化クエリを使用する必要があります」。

+5

また、SQLインジェクションを避けるために**パラメトリッククエリ**を実際に使用する必要があります..... –

+1

または、いつでも** [this](http:// xkcd。com/327 /)**詳細情報=) – jadarnel27

+3

良い古いボビーテーブル! – Curt

3

Userを読むキーワードです。予約されたキーワードは、かっこ([])で囲んで使用できます。値はかっこ(())で囲む必要があります。

は、以下のことを試してみてください。

str = "Insert into [User] (Name, Uid) values 
     ('" + tb1.Text + "', '" + tb1.Text + "')"; 

あるいは、より読み:jadarnel27はコメントとして

str = String.Format("Insert into [User] (Name, Uid) values ('{0}', '{1}')", 
        tb1.Text, tb2.Text); 

また、SQL injection attacsを防ぐために、パラメータ化されたSQLを使用してご検討ください。

+0

虚栄心upvote! – jadarnel27

+0

=)thanks @dennis – vini

10

ここでは3つのことが間違っています。


それがキーワードであるとして、あなたのテーブル名の前後にブラケットを追加します。

INSERT INTO [User] 

は、将来的にオブジェクトを命名する際に、キーワードを使用しないようにしてください。それは長期的に頭痛の多くを保存することができます!

View reserved keywords here


クエリがの形をしているので、自分の価値観の周りにブラケットを追加します。

最も重要なのは(その1つのエラーとしてあなたは」勝った
INSERT INTO [TableName] (ColumnA, ColumnB) VALUES (@ParamA, @ParamB) 

約プロンプトが表示されますが、長期的には苦労します)、クエリをパラメータ化します。これは、SQL Injectionを避けることができますし、任意のSQLクエリを書く際に一般的に行わなければなりません:

cmd.CommandText = "Insert into [User] (Name, Uid) values (@Name, @Uid)"; 
cmd.Parameters.Add("@Name", SqlDbType.Nvarchar).Value = tb1.Text; 
cmd.Parameters.Add("@Uid", SqlDbType.Int).Value = tb1.Text; 
+0

ありがとうございました。 – vini

関連する問題