Sql Parameeterの使い方


[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 ,     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