C#データベースへの接続方法
8787 ワード
以下に、c#データベースへの接続方法について説明します.
ASP.NETがデータベースに接続する技術をADOという.NETは、sql文をデータベースにコミットするためのクラスです.ここに接続されているのはSql Server 2008データベースで、他のデータベースの使い方はあまり悪くありませんが、呼び出しのクラス名が違います.
まずWeb.config(ローカルの追加アプリケーションプロファイルApp.config、ローカルにSystem.configuration.dllプログラムセットも追加)にデータベース接続文字列を構成し、次のノードコードを追加します.
プログラムがデータベースを使用する場合、プロファイルの接続文字列を抽出して変数に割り当てます.コードは次のとおりです.
次にデータベース接続を開き、使用が完了したらusingで自動的に接続を解除します.
SqlConnectionは、SQL Serverデータベースのオープン接続を示すシールクラスです.次にSQL文を実行し、まずデータベースにコマンドを送信するために使用するSqlCommandクラスを定義し、定義した後に文が実行する接続オブジェクトがconnであることを決定し、実行するSQL文を決定します.使用例は次のとおりです.
1行、1列の戻り値の結果に対してExecuteScale()を実行し、objectタイプを返します.例を次に示します.
0列
第1列
2列目
第3列
Id
Name
Age
Hobby
1
XXX
18
妹に取り入る
2
王旭
30
妹に取り入る
図1データベースT_Studentテーブル
データベース注入の脆弱性を回避するために、マイクロソフトには次のようなクエリー・パラメータが設定されています.
cmd.CommandText =”select * from T_Student where Age
cmd.Parameters.Add(new SqlParameter(“@Age”,19));
ここでは@Ageをクエリーパラメータに設定しますが、@パラメータはテーブル名、フィールド名、selectなどのキーワードなどを置き換えることはできません.
SqlDataReaderは接続に関連しており、SqlDataReaderのクエリー結果はプログラムではなく、データベース・サーバに配置されます.SqlDataReaderはカーソルに相当し、どこでどこで読むかを指します.
ADO.NETはデータセットメカニズムを提供し、DataSetは、ローカルメモリが存在し、それはいくつかのDataTableを含み、DataTableはいくつかの行DataRowを含む.使用方法:
データベースではNULLと「」が異なり、NULLと0も異なります.データベース内のNULLは「わかりません」を表します.テーブルに空のフィールドNameがある場合、いくつかのインスタンスNameがNULLである場合、
select * from T_Student where Name=NULLではデータは検出されません.select * from T_Student where Name is NULLは、すべてのNameがNULLを記入したデータを調べることができます.
需要:名前が入力されていない場合はNULL、年齢が入力されていない場合はNULLとなります.
質問:SqlParameterでパラメータ値がnullの場合、パラメータの値が指定されていないことを示し、エラーが発生します.
解决方法:.NETはDBNullを提供する.Valueは、データベース内のNULLを表すために使用されます.DBNull.Valueはobjectタイプです.次のように使用する必要があります.
同時にデータベースを読み込むときにNullが存在する、に戻る.NETの値もDBNull.Value.したがって、読み取り後に判断して値を付与します.
0,NULLと「」を厳密に区別しなければならない.そうしないと、問題が発生して調べにくい.
前回お話ししたSqlHelperに付いている2つの関数は、上記の2つの使い方のパッケージであり、SqlParameterパラメータに直接使用することができます.
空データ入力可能データベースの場合
以上、本稿で紹介したC#データベースへの接続方法について、ご愛用ください.
ASP.NETがデータベースに接続する技術をADOという.NETは、sql文をデータベースにコミットするためのクラスです.ここに接続されているのはSql Server 2008データベースで、他のデータベースの使い方はあまり悪くありませんが、呼び出しのクラス名が違います.
まずWeb.config(ローカルの追加アプリケーションプロファイルApp.config、ローカルにSystem.configuration.dllプログラムセットも追加)にデータベース接続文字列を構成し、次のノードコードを追加します.
nameはリンク文字列名で、勝手に取ることができます.connectionStringはリンク文字列です.Data SourceデータベースがあるサーバのIPアドレスは、ここではローカルに「.」と書きます.Initial Catalogはデータベース名です.User Idはデータベース・ユーザーであり、saは最高権限管理者アカウントであり、慎重に使用する必要があり、データベースに対して専用の制限されたアカウントを確立します.Passwordはパスワードです.プログラムがデータベースを使用する場合、プロファイルの接続文字列を抽出して変数に割り当てます.コードは次のとおりです.
public static readonly string connstr =
ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
コンフィギュレーションマネージャは静的クラスであり、クライアントアプリケーションプロファイルへのアクセスを提供します.次にデータベース接続を開き、使用が完了したらusingで自動的に接続を解除します.
SqlConnectionは、SQL Serverデータベースのオープン接続を示すシールクラスです.次にSQL文を実行し、まずデータベースにコマンドを送信するために使用するSqlCommandクラスを定義し、定義した後に文が実行する接続オブジェクトがconnであることを決定し、実行するSQL文を決定します.使用例は次のとおりです.
//SqlConnection
using(SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();//
// (Command) SqlCommand
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =”Insert into T_Student*(Name,Age) values(‘XXX',18)”;// CommandText SQL
cmd.ExecuteNonQuery();//
}
}
ExecuteNonQuery()は、一般的にUpdate、Delete、Insert文を実行するために使用されます.1行、1列の戻り値の結果に対してExecuteScale()を実行し、objectタイプを返します.例を次に示します.
using(SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();//
// (Command) SqlCommand
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =”select Name from T_Student where Name=”XXX””;// CommandText SQL
cmd.ExecuteScalar();//
}
}
戻り値に複数行の結果がある場合はExecuteReader()を、戻りタイプSqlDataReaderを使用します.たとえば、次のように使用します.
using(SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();//
// (Command) SqlCommand
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =”select * from T_Student where Age<18”;
using(SqlDataReader reader=cmd.ExecuteReader()
{
while(reader.Read())
{
string name=reader.GetString(1);//
int age=reader.GetIn32(2); // 2
Console.WriteLine(name);
Console.WriteLine(age.ToString());
}
}
}
}
ここでReadメソッドはboolタイプを返し、クエリの結果はデータベースに格納され、クライアントに格納されません.最初のポインタが最初のデータを指す前に、Readerポインタを呼び出すたびに1つ下に移動し、最後のポインタに移動しない限りtrueに戻ります.readerのGetStringGetInt 32などのメソッドは整数パラメータ、すなわちシーケンス番号のみを受け入れ、GetOrdinalメソッドでカラム名に基づいてシーケンス番号を動的に得る.0列
第1列
2列目
第3列
Id
Name
Age
Hobby
1
XXX
18
妹に取り入る
2
王旭
30
妹に取り入る
図1データベースT_Studentテーブル
データベース注入の脆弱性を回避するために、マイクロソフトには次のようなクエリー・パラメータが設定されています.
cmd.CommandText =”select * from T_Student where Age
cmd.Parameters.Add(new SqlParameter(“@Age”,19));
ここでは@Ageをクエリーパラメータに設定しますが、@パラメータはテーブル名、フィールド名、selectなどのキーワードなどを置き換えることはできません.
SqlDataReaderは接続に関連しており、SqlDataReaderのクエリー結果はプログラムではなく、データベース・サーバに配置されます.SqlDataReaderはカーソルに相当し、どこでどこで読むかを指します.
ADO.NETはデータセットメカニズムを提供し、DataSetは、ローカルメモリが存在し、それはいくつかのDataTableを含み、DataTableはいくつかの行DataRowを含む.使用方法:
DataSet dataset=new DataSet();
SqlDataAdapter adapter=new SqlDataAdapter(cmd);
adapter.Fill(dataset);
SqlDataAdapterは、SqlCommandクエリの結果をDataSetに埋め込むクラスです.DataSetはローカルのlistセット(小さなデータベース)に相当します.遍歴方法は次のとおりです.
DataTable table=dataset.Tables[0];// Tables, select Tables。
DataRowCollection rows=table.Rows;
for(int i=0;i
基本的にすべてのステップは、リンクを開く--コマンドを作成する--実行する--実行結果を処理します.だから、共通クラスを書いて自分で使うことができて、重複コードを避けて、詳細なコードは以下の通りです.
public static class SqlHelper
{
public static readonly string connstr =
ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
public static SqlConnection OpenConnection()//
{
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
return conn;
}
public static int ExecuteNonQuery(string cmdText,
params SqlParameter[] parameters)//
{
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
return ExecuteNonQuery(conn, cmdText, parameters);
}
}
public static object ExecuteScalar(string cmdText,
params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
return ExecuteScalar(conn, cmdText, parameters);
}
}
public static DataTable ExecuteDataTable(string cmdText,
params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
return ExecuteDataTable(conn, cmdText, parameters);
}
}
public static int ExecuteNonQuery(SqlConnection conn,string cmdText,
params SqlParameter[] parameters)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();//
}
}
public static object ExecuteScalar(SqlConnection conn, string cmdText,
params SqlParameter[] parameters)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}
}
public static DataTable ExecuteDataTable(SqlConnection conn, string cmdText,
params SqlParameter[] parameters)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
public static object ToDBValue(this object value)
{
return value == null ? DBNull.Value : value;
}
public static object FromDBValue(this object dbValue)
{
return dbValue == DBNull.Value ? null : dbValue;
}
}
パッケージメソッドの原則:不変のメソッドに、変化のパラメータに、SqlHelperクラスの戻り値は1行1列のExecuteScaleで、ExecuteNonQueryは一般的にUpdateDeleteInsert文を実行するために使用され、ExecuteDataTableはクエリ結果の少ないsqlのみを実行し、戻り値はDataTableである.データベースではNULLと「」が異なり、NULLと0も異なります.データベース内のNULLは「わかりません」を表します.テーブルに空のフィールドNameがある場合、いくつかのインスタンスNameがNULLである場合、
select * from T_Student where Name=NULLではデータは検出されません.select * from T_Student where Name is NULLは、すべてのNameがNULLを記入したデータを調べることができます.
需要:名前が入力されていない場合はNULL、年齢が入力されていない場合はNULLとなります.
質問:SqlParameterでパラメータ値がnullの場合、パラメータの値が指定されていないことを示し、エラーが発生します.
解决方法:.NETはDBNullを提供する.Valueは、データベース内のNULLを表すために使用されます.DBNull.Valueはobjectタイプです.次のように使用する必要があります.
object objName;
string name=tbName.Text;
if(name.Length<0)
{
objName=DBNull.Value;
}else
{
objName=name;
}
次にSqlParameterパラメータをobjNameに変更します.同時にデータベースを読み込むときにNullが存在する、に戻る.NETの値もDBNull.Value.したがって、読み取り後に判断して値を付与します.
if(row[“Name”]==DBNull.Value)
{
name=null;
}
else
{
name=(string)row[“Name”];
}
しかし、intタイプであればnullではなく、この定義の際にint?age.0,NULLと「」を厳密に区別しなければならない.そうしないと、問題が発生して調べにくい.
前回お話ししたSqlHelperに付いている2つの関数は、上記の2つの使い方のパッケージであり、SqlParameterパラメータに直接使用することができます.
空データ入力可能データベースの場合
public static object ToDBValue(this object value)
{
return value == null ? DBNull.Value : value;
}
出力時用
public static object FromDBValue(this object dbValue)
{
return dbValue == DBNull.Value ? null : dbValue;
}
これは主にSqlParameterで用いられ,空データの入出力を実現する.以上、本稿で紹介したC#データベースへの接続方法について、ご愛用ください.