Sql Parameeterの使い方
8257 ワード
[csharp]view plin copy print?
一般的に、DataTableまたはDataSetを更新する際に、Sql Parameeterを使用しないと、入力したSql文にエラーが発生した場合、文字列に単一引用符が含まれているように、プログラムにエラーが発生し、Sql文をつなぎ合わせることによって、他の人が簡単に攻撃を行うことができます。 ストリングス sql = 「udate テーブル1 セット name = 'Pudding where ID = '1''''、///Sql Parameeterを使用していません。 Sql Connection コンサート = new Sql Connection() conn.Connection String = 「データ Source=\\SQLExpress;Integrated Security=true;AttachDb Filename=|Data Directory\\Database.mdf;User Instance=true"///接続文字列はデータベースと関係があります。 Sql Command cmd = new Sql Command(sql、 コンサート try { conn.Open() return(cmd.Execute NonQuery); ) catch (Exception) { return -1; throw; ) finally { conn.Close() ) 上記のコードはSql Parameeterを採用していません。セキュリティ上の問題がある以外に、この方法は写真ファイルなどのバイナリストリームの更新を解決することができません。Sql Parameeterを使用することによって上記の問題を解決することができます。一般的な使用方法は、Add方法とAddRange方法の2つがあります。 一、Add方法 Sql Parameeter sp = new Sql Parameeter(「@name」、 Pudding cmd.Parameeters.Add(sp); sp = new Sql Parameeter(「@ID」、 「1」) cmd.Parameeters.Add(sp); この方法は、Sql Parameeterを1回に1つしか追加できない。上記のコードの機能は、ID値が1に等しいフィールドnameをPuddingに更新することです。 二、AddRange方法 Sql Parameeter[] paras = new Sql Parameeter[] { new Sql Parameeter(「@name」、 Pudding) new Sql Parameeter(「@ID」、 「1」) }; cmd.Parameeters.AddRange(paras) は、Add方法がSql Parameeterを複数追加する際に不便であることを明らかにしている。この場合、AddRange方法を採用することができる。 以下は、Sql Parameeterを介してデータベースに画像を格納および読み出しするコードである。 pblic 要点 SavePhotoo(string) photourl) { FileSteream fs = new FileStream(photourl) FileMode.Open、 FileAccess.Read)//BinaryReaderにバイトデータストリームを書き込むためにFileStreamオブジェクトを作成する。 BinaryReader br = new BinaryReader(fs)//BinaryReaderオブジェクトを作成して、下のbyte配列を書き込みます。 byte[] photo = bb.ReadBytes(int)fs.Length; //byte配列を新規作成し、brのデータを書き込みます。 bc.lose()///閉じることを覚えていますbr fs.Close()//そしてfs ストリングス sql = 「udate テーブル1 セット photo = @photo where ID = '0''' Sql Connection コンサート = new Sql Connection() conn.Connection String = 「データ Source=\\SQLExpress;Integrated Security=true;AttachDb Filename=|Data Directory\\Database.mdf;User Instance=true"; Sql Command cmd = new Sql Command(sql、 コンサート Sql Parameeter sp = new Sql Parameeter(「@photo」、 photo; cmd.Parameeters.Add(sp); try { conn.Open() return (cmd.Execute NonQuery(); } catch (Exception) { return -1; throw; } finally { conn.Close() } } pblic void ReadPhotoo(string) url { ストリングス sql = プロジェクト photo from テーブル1 where ID = '0''' Sql Connection コンサート = new Sql Connection() conn.Connection String = 「データ Source=\\SQLExpress;Integrated Security=true;AttachDb Filename=|Data Directory\\Database.mdf;User Instance=true"; Sql Command cmd = new Sql Command(sql、 コンサート try { conn.Open() Sql Data Reader reader = cmd.ExecuteReader()//Sql Data Readerの方法でデータを読み込みます。 if (reader.Read() { byte[] photo = reader[0] as byte[]//0列目のデータをbyte配列に書き込む FileSteream fs = new FileStream(url,FileMode.C.reat New)は、FileStreamオブジェクトを作成して、バイトデータストリームを書き込むために使用されます。 fs.Write(photo,0,photo.Length)//byte配列のデータをfsに書き込む fs.Close()//クローズfs } reader.C lose()//クローズreader } catch (Exception ex) { throw; } finally { conn.Close() } } }
一般的に、DataTableまたはDataSetを更新する際に、Sql Parameeterを使用しないと、入力したSql文にエラーが発生した場合、文字列に単一引用符が含まれているように、プログラムにエラーが発生し、Sql文をつなぎ合わせることによって、他の人が簡単に攻撃を行うことができます。
, DataTable DataSet , SqlParameter, Sql , , , Sql 。
string sql = "update Table1 set name = 'Pudding' where ID = '1'";// SqlParameter
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";//
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return(cmd.ExecuteNonQuery());
}
catch (Exception)
{
return -1;
throw;
}
finally
{
conn.Close();
}
SqlParameter, , , 。 SqlParameter , ,Add AddRange 。
、Add
SqlParameter sp = new SqlParameter("@name", "Pudding");
cmd.Parameters.Add(sp);
sp = new SqlParameter("@ID", "1");
cmd.Parameters.Add(sp);
SqlParameter。 ID 1 name Pudding( )。
、AddRange
SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name", "Pudding"), new SqlParameter("@ID", "1") };
cmd.Parameters.AddRange(paras);
,Add SqlParameter , , AddRange 。
SqlParameter 。
public int SavePhoto(string photourl)
{
FileStream fs = new FileStream(photourl, FileMode.Open, FileAccess.Read);// FileStream , BinaryReader
BinaryReader br = new BinaryReader(fs);// BinaryReader , byte
byte[] photo = br.ReadBytes((int)fs.Length); // byte , br
br.Close();// br
fs.Close();// fs
string sql = "update Table1 set photo = @photo where ID = '0'";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlParameter sp = new SqlParameter("@photo", photo);
cmd.Parameters.Add(sp);
try
{
conn.Open();
return (cmd.ExecuteNonQuery());
}
catch (Exception)
{
return -1;
throw;
}
finally
{
conn.Close();
}
}
public void ReadPhoto(string url)
{
string sql = "select photo from Table1 where ID = '0'";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();// SqlDataReader
if (reader.Read())
{
byte[] photo = reader[0] as byte[];// 0 byte
FileStream fs = new FileStream(url,FileMode.CreateNew); FileStream ,
fs.Write(photo,0,photo.Length);// byte fs
fs.Close();// fs
}
reader.Close();// reader
}
catch (Exception ex)
{
throw;
}
finally
{
conn.Close();
}
}
}
:29609188