1. ホーム
  2. データベース
  3. アクセス

アクセス利用概要

2022-01-16 01:45:40
1. Accessの使い方
2年前に少しAccessを使いましたが、小さな不具合が多いと感じているので、もう使っていません。プログラムは、ギガビットワイドウェブのウェブホストに配置され、このWebホストは、Sqliteをサポートしていない、データを読み取る限り、データベースへの書き込みとして、それはエラーを報告します、いくつかのディスクI/Oエラーが発生しました。これは、私のプログラムの問題ではないことを意味します。主な問題は、接続文字列であり、いくつかのデータベースの違いに注意を払う必要があります。
1.1 データベース接続文字列

<add name="ConnectionString" connectionString="data source=|DataDirectory|wewe.mdb;Provider=Microsoft.Jet.OLEDB.4.0& quot; /> 接続文字列は非常にシンプルで、データソースを指定するだけです、ここで |DataDirectory| は App_Data ディレクトリです、この Asp.net の方法によってデータベースファイルの場所を簡単に相対パスで指定できるのです。ここでは、ProviderはOledbドライバを使用しています。
1.2 使用方法
プログラムでの使い方は非常に簡単で、Connection, Commandの前の接頭辞を置き換えるだけで完了です。例を挙げます。
コピーコード コードは以下の通りです。

public DataTable GetAll(string num,int min,int startRecord, int pageSize)
{
string sql = string.Format("select Num ,minPrice ,isUsed from PhoneNumber where Num like '{0}%' and isUsed=0", num);
if (min ! = 0)
{
sql += "and minPrice=@p1";
}
using (OleDbConnection conn = new OleDbConnection(SqlHelper.ConnStr))
{
conn.Open();
OleDbCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
if (min ! = 0)
cmd.Parameters.AddWithValue("p1", min);
OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
DataTable table = new DataTable();
adp.Fill(startRecord,pageSize,table);
return table;
}
}

そしてもちろん、using System.Data.OleDbを追加します。
実は、ADO.NETにはConnectionやCommandなどのDbを先頭に持つクラス群があり、これらの特定のクラスはすべてDbConnectionを継承しているので、見た目はすべて同じです。
1.3 差異点

上記のように、Accessは厄介です。以下は、私が遭遇したことのあるもののリストです。
1.3.1 user はキーワードなので、テーブル名やカラム名で括弧のない user があるとエラーになります。もちろん、すべてのテーブル名とカラム名を一貫して括弧で囲むことは、良いプログラミングの習慣です。
1.3.2 DateTime型のデータを直接挿入すると、データベースのフィールド型が確かにDateで、挿入する方法がC#のDateTime型のToString()をかぶせたとしても、エラーが報告されます。
1.3.3 yesnoというbool型(ビット型)は存在しない ......。
1.3.4 No more than one sql in a command. この制限も厄介です。1つのコマンド実行につき、1つのsqlしか含めることができないので、非常に不便です。Sqliteなどの小さなデータベースには、この制限はありません。
1.3.5 パラメータの順序の問題。コマンドに追加するパラメータの宣言と、宣言されたパラメータの順序が一致している必要があります。そうでない場合、何も報告されず、結果にも影響がない可能性が高いです (更新時、試行時ではありません)。Accessは本当に優秀なデータベースアッ 例えば
コピーコード コードは以下の通りです。

string sql = "update [user] set WorkField=@p1, Company=@p3,IC=@p4,Contact=@p5,Phone=@p6,Mobile=@p7,Address=@p8,Email=@p9, Introduction=@p10 "
+ "where username=@p2";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("p1", entity.WorkField);
cmd.Parameters.AddWithValue("p3", entity.Company);
cmd.Parameters.AddWithValue("p4", entity.IC);
cmd.Parameters.AddWithValue("p5", entity.Contact);
cmd.Parameters.AddWithValue("p6", entity.Phone);
cmd.Parameters.AddWithValue("p7", entity.Mobile);
cmd.Parameters.AddWithValue("p8","");
cmd.Parameters.AddWithValue("p9", string.IsNullOrEmpty(entity.Email)? " ":entity.Email);
cmd.Parameters.AddWithValue("p10", string.IsNullOrEmpty(entity.Introduction)? " ":entity.Introduction);
cmd.Parameters.AddWithValue("p2", entity.UserName);
int i= cmd.ExecuteNonQuery(); This is fine, but putting
cmd.Parameters.AddWithValue("p2", entity.UserName);

更新ができません。幸い、csdnで検索したら、この質問をした人がいたのですが、そうでなければ、入手方法がわかりません。
2. z-indexの問題。
他のHTML要素の内部に含まれるHTML要素のz-indexは、同じレベルに位置する要素のz-indexとの相対関係のみで、その親要素の外側にある要素のz-indexには影響しません。つまり、親要素のz-indexが0など小さく、内部要素のz-indexが大きい場合、親要素に隣接する要素のz-indexは1000、 indexは2、内部要素がオーバーフローして隣接要素と重なってもカバーすることになります。