2

SQL ServerCompactEditionにデータを挿入したいデータベーステーブルのスクリーンショットはこちら>>> ユーザーにデータを追加したい追加スクリプトは次のとおりです

SqlCeConnection Con = new SqlCeConnection();
Con.ConnectionString = "Data Source = 'Database.sdf';" +
                       "Password='Password';";
Con.Open();
int Amount=Convert.ToInt32(AmBox.Text),
Code=Convert.ToInt32(MCode.Text),
Num=Convert.ToInt32(MNum.Text);
string Name=Convert.ToString(NBox.Text),
FName=Convert.ToString(SOBox.Text),
Address=Convert.ToString(AdBox.Text);

SqlCeCommand Query =new SqlCeCommand("INSERT INTO Users VALUES " + 
                        "(++ID,Name,FName,Address,Code,Num,Amount)",Con);
Query.ExecuteReader();

実行すると、「列名が無効です[ノード名(存在する場合)=、列名=ID]」というエラーが生成されます。

問題がわからないので、よろしくお願いします!

4

1 に答える 1

6

コードを次のように変更する必要があります

using(SqlCeConnection Con = new SqlCeConnection("Data Source = 'Database.sdf';" + 
                                                "Password='Password';")
{ 
    Con.Open(); 
    SqlCeCommand Query = new SqlCeCommand("INSERT INTO Users " + 
                             "(Name,FName,Address,MCode,MNum,Amount) " +
                             "VALUES (@Name,@FName,@Address,@Code,@Num,@Amount)",Con); 

    Query.Parameters.AddWithValue("@Name", NBox.Text);
    Query.Parameters.AddWithValue("@FName", SOBox.Text)); 
    Query.Parameters.AddWithValue("@Address",AdBox.Text)); 
    Query.Parameters.AddWithValue("@Code", Convert.ToInt32(MCode.Text));
    Query.Parameters.AddWithValue("@Num", Convert.ToInt32(MNum.Text));
    Query.Parameters.AddWithValue("@Amount" , Convert.ToInt32(AmBox.Text));
    Query.ExecuteNonQuery(); 
}
  • usingステートメントは、接続の正しい破棄を保証します
  • パラメータコレクションは、SQLインジェクション攻撃と引用の問題を回避します
  • ExecuteNonQueryこれは挿入クエリであるため、を使用します。
  • ++IDを削除しました。データベースに渡すのは有効な値ではありません

IDフィールドがIdentity列の場合、コードから値を渡すことはありませんが、データベースに次の値を計算させます。
また、データソースとパスワードキーの周りの接続文字列に一重引用符が本当に必要かどうかはわかりません。

編集---.SDFデータベースが別のフォルダーにある場合があります。(最新のオペレーティングシステムでは、アプリケーションフォルダへの書き込みができません)。
この場合、接続文字列でSDFファイルへのパスを設定する必要があります。
たとえば、SDFはC:\ProgramDataディレクトリのサブフォルダに配置できます。

string conString = "Data Source=" + 
        Path.Combine(
               Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
               "MyAppData\\database.sdf") + ";Password=yourPassword;";
于 2012-07-27T19:56:34.670 に答える