0

このテーブルに新しい行を挿入しようとすると、(主キーであるため) 列を変更できないというエラーが表示されます。だから私はそれをクエリから除外しますが、クエリと列の数が異なることを返します。主キーを使用して行を追加するにはどうすればよいですか?

挿入するコードは次のとおりです。

var getmessages = new SqlCeCommand("Insert into chat values('" + txtSend.Text + "', '" + Environment.UserName + "', '" + user + "', '" + Environment.UserName + "', '" + DateTime.Now.ToShortTimeString() + "', '" + DateTime.Now.ToString() + "', '"+UID+"')", con);

これは、クエリを介して追加する主キーです(データベースの更新であるため)...

alter table chat add c_id int identity primary key

そして、それは私にエラーをスローしますここに画像の説明を入力

そして、挿入クエリから (UID) を削除すると、このエラーが発生します...

ここに画像の説明を入力

4

4 に答える 4

5

挿入先の列を正確に SQL CE に伝える必要があります。

最初の問題は、それが主キーだからではありません。これは、キーが識別フィールドであり、自動生成されるためです。それでは、先に進みましょう。

2 番目の問題は、挿入先の列を指定していないことです。

挿入は次のようになります。

insert into chat(field1, field2, field3) values('val1', 'val2', 'val3')

フィールド名に注意してください。そこにある実際のフィールド名を入力する必要があります。

とはいえ、コードはまだかなり悪いです。上記は機能しますが、クエリをパラメーター化する必要があります。このプログラムが実際に現実の世界にリリースされることはないと仮定しても、誰かがハッキングしても気にしないと仮定しても...正しい方法で物事を行うことは良い習慣です。'ああ..そして、アプリがクラッシュする原因となるマークの問題はありません..

于 2013-10-01T00:50:27.330 に答える
1

クエリで主キー以外のすべての列を指定する必要があります。

Insert into chat (column1, column2, ...) values (...)
于 2013-10-01T00:50:18.833 に答える
0

以下のように、クエリの値を使用してパラメーターも定義する必要があります。

  insert into table(f1,f2,f3) values(v1,v2,v3)
于 2013-10-01T07:09:57.597 に答える
0

コードに重大な SQL エラーがあります。パラメータを使用して各列を指定する必要があります。

var insert = new SqlCeCommand("Insert into chat (sendCol, firstNameCol, secondNameCol, firstTimeCol, secondTimeCol, uidCol) values (@send, @name, @name, @time, @time, @uid)";
insert.Parameters.Add(new SqlCeParameter("@send", txtSend.Text));
insert.Parameters.Add(new SqlCeParameter("@name", Environment.UserName));
insert.Parameters.Add(new SqlCeParameter("@time", DateTime.Now));
insert.Parameters.Add(new SqlCeParameter("@uid", Something));
于 2013-10-01T01:02:18.863 に答える