. NET writes non-text types to SQL

Source: Internet
Author: User

In general, when updating a DataTable or DataSet, if you do not use SqlParameter, when the input SQL statement is ambiguous, such as the string contains single quotation marks, the program will have an error, and others can easily splicing SQL statements to inject attacks.

?
123456789101112131415161718 stringsql = "update Table1 set name = ‘Pudding‘ where ID = ‘1‘";//未采用SqlParameterSqlConnection conn = newSqlConnection();conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";//连接字符串与数据库有关SqlCommand cmd = newSqlCommand(sql, conn);try{    conn.Open();    return(cmd.ExecuteNonQuery());}catch(Exception){    return-1;    throw;}finally{    conn.Close();}

The above code does not adopt SqlParameter, in addition to the existence of security issues, the method is not able to resolve the binary stream update, slice file. The above problems can be solved by using SqlParameter, and there are two common ways to use them, the Add method and the AddRange method.

First, the Add method

?
1234 SqlParameter sp = newSqlParameter("@name","Pudding");cmd.Parameters.Add(sp);sp = newSqlParameter("@ID","1");cmd.Parameters.Add(sp);

This method can only add one SqlParameter at a time. The function of the above code is to update the field name with the ID value equal to 1 to pudding (person name).

Second, AddRange method

?
12 SqlParameter[] paras = newSqlParameter[] { new SqlParameter("@name","Pudding"),newSqlParameter("@ID","1") };cmd.Parameters.AddRange(paras);
Obviously, the Add method is inconvenient when adding multiple SqlParameter, at which point the AddRange method can be used. Here is the code to store and read the picture through SqlParameter to the database.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 publicintSavePhoto(stringphotourl){    FileStream fs = newFileStream(photourl, FileMode.Open, FileAccess.Read);//创建FileStream对象,用于向BinaryReader写入字节数据流    BinaryReader br = newBinaryReader(fs);//创建BinaryReader对象,用于写入下面的byte数组    byte[] photo = br.ReadBytes((int)fs.Length);//新建byte数组,写入br中的数据    br.Close();//记得要关闭br    fs.Close();//还有fs    stringsql = "update Table1 set photo = @photo where ID = ‘0‘";    SqlConnection conn = newSqlConnection();    conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";    SqlCommand cmd = newSqlCommand(sql, conn);    SqlParameter sp = newSqlParameter("@photo", photo);    cmd.Parameters.Add(sp);    try    {        conn.Open();        return(cmd.ExecuteNonQuery());    }    catch(Exception)    {        return-1;        throw;    }    finally    {        conn.Close();    }}publicvoidReadPhoto(stringurl)    {        stringsql = "select photo from Table1 where ID = ‘0‘";        SqlConnection conn = newSqlConnection();        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] asbyte[];//将第0列的数据写入byte数组                FileStream fs = newFileStream(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();        }    }}

. NET writes non-text types to SQL

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.