的类型中增添澳门新蒲京平台

两种开垦方式

1.动用 vs 自带的可视化学工业具,不推荐。

在 vs
的门类中添加‘数据集’,然后经过可视化的工具增多数据库为数据源,暗中同意同增多 SQL Server
和 Oracle 等,增多 Mysql 前要求相当安装组件。

亮点,自带
sql 语句中特殊字符的转义,不会冒出 sql
注入的标题,合营数据绑定能够在项目后期火速拉动项目进程。

破绽:可视化学工业具的应用并一时兴,不方便人民群众开荒公司的招降纳叛和项最近期的改变维护。多数常用的功用很难使用,如:存款和储蓄进程,事务,连接池调节等。

2.援用 mysql.data.dll ,在这里根底上扩充支付,推荐。

一心由代码完毕报纸发表进程。

亮点:能够一本万利的行使各个成效,

短处:在利用的历程中要潜心多数坑,如:非凡的破获,sql
注入 , 非托管财富的放出等。


 


 

全体的广播发表进程

1.创设连接,连接分 “长连接” 和 “短连接” 

长连接在高频次的广播发表时快捷高效,可是占用能源,在出现访谈下轻便耗尽互联网能源,对于带宽十分低的局域网来讲,假使大度采纳长连接,会占有网速,影响使用体验。

短连接在使用时
open, 使用造成后
close,那时候接连能源会进来连接池,等待后一次连接时接受。即使能源未被假释掉,但连接池的支出超级小,是一心能够采用的。短连接同样须求构思并发难题。

短连接在选拔完了后能够一向dispose,或然利用 using(){}
来限定连接的功能域,使用产生后自行释放掉,不进去连接池,这种形式财富占用起码,但在须求再三建构连接的情况下一而再功效非常低。

在事实上支付的时候最棒使用短连接,并在行使完结后关门并放入连接池。

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open(); 
conn.Close();

2.应用连接创立 sql 命令并实行

1.纯 sql 语句,施行后有三种回到形式:

cmd.ExecuteScalar();  //
查询结果仅生机勃勃行一列,直接吸取

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
string name = "Tom";
cmd.CommandText = string.Format("select  count(*) from student where Name = '{0}';", name);
object obj = cmd.ExecuteScalar(); //可能未null
int count = 0;
if (!obj.Equals(DBNull.Value))
{
  count = Convert.ToInt32(obj);
}  
conn.Close();  

 

 

MySqlDataReader
reader = cmd.ExecuteReader();  // 通过 reader 获得多量数码

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandText = string.Format("select  Name from student;");
MySqlDataReader reader = cmd.ExecuteReader();
List<string> list = new List<string>();
while (reader.Read())
{
    list.Add(reader.GetString("Name"));
}
reader.Close();
conn.Close();

 

cmd.ExecuteNonQuery();  //
得到增加和删除改语句执行后影响的行数

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
string name = "Tom";
cmd.CommandText = string.Format("update student SET Name='Tommy' where Name = '{0}';", name);
int count = cmd.ExecuteNonQuery();
conn.Close();

 

常备
sql 语句的宿疾:即使上面例子中的 name 参数中蕴藏单引号,整个 sql
语句将实施错误,因为未对特殊字符举办转义。主要特殊字符有单引号,反斜杠,#
等,而那些特殊字符在不一样的利用意况下有时要求转义,一时无需转义。Mysql
提供了近乎 QUOTE(str) 那样的字符串管理函数,但不能够一心知足须求。

这就是sql 注入,sql
注入的定义网络资料超级多,在这不再赘述,而常用的解决方案是选拔参数化的 sql
语句。

2.sql 语句和 sql 参数

带有参数的
sql 语句和 sql 参数会分开传入数据库服务器中,服务器先将 sql
语句进行编写翻译,然后将 sql 参数导入编写翻译后的 sql
语句中(在这里进程中机动对特殊字符举办转义卡塔尔,进而从根源上防守了 sql
注入的发出。

string connStr = "server=127.0.0.1; port=3306; user id=user1; Password=pass1; database=data1; pooling = true";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select  count(*) from student where Name = @Name;";
MySqlParameter[] sps = new MySqlParameter[1];
sps[0] = new MySqlParameter("@Name", "Tom");
cmd.Parameters.AddRange(sps);
object obj = cmd.ExecuteScalar(); //可能未null
int count = 0;
if (!obj.Equals(DBNull.Value))
{
    count = Convert.ToInt32(obj);
}   
conn.Close();  

3.事务

多条 sql 语句的组合会现身某一条 sql 语句推行出错,而其他 sql
语句顺遂试行的图景,那或者与预期不合乎。那个时候内需选择专门的工作。

业务在施行出错开上下班时间能够回滚。

政工往往带有多条 sql 语句,在动用参数化的 sql
语句时要小心参数名称不能够平等。

conn.Open();
MySqlCommand cmd = conn.CreateCommand();
MySqlTransaction myTrans = conn.BeginTransaction();
cmd.Connection = conn;
cmd.Transaction = myTrans;
cmd.CommandText = "";
cmd.ExecuteNonQuery();
myTrans.Commit();
conn.Close();

 

 

4.囤积进程

无论是是 sql
语句依然业务,在传输指令的时候都急需花费大批量的大运,数据库编写翻译这个指令也供给消耗大批量时刻,那不利于高访问量的数据库的运营。

积存进程是将 sql
指令写在数据库中,当时数据库直接完事编写翻译,与数据库通信是只须求传递参数就可以。节省了传输时间和编写翻译时间。

conn.Open();
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SpFillStudent";

MySqlParameter paraMoney;
paraMoney = cmd.Parameters.Add("@inMoney", MySqlDbType.Decimal);
paraMoney.Direction = ParameterDirection.Input;
paraMoney.Value = 50;

MySqlParameter paraTradeType;
paraTradeType = cmd.Parameters.Add("@inTradeType", MySqlDbType.String);
paraTradeType.Direction = ParameterDirection.Input;
paraTradeType.Value = "会员卡充值";

MySqlParameter paraPayDetailStr;
paraPayDetailStr = cmd.Parameters.Add("@inPayDetailStr", MySqlDbType.String);
paraPayDetailStr.Direction = ParameterDirection.Input;
paraPayDetailStr.Value = "";

MySqlParameter paraOutResult;
paraOutResult = cmd.Parameters.Add("@outResult", MySqlDbType.String);
paraOutResult.Direction = ParameterDirection.Output;

cmd.ExecuteNonQuery();
string result = (string)paraOutResult.Value;
conn.Close();

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website