C#操作Mysql資料庫的儲存過程
阿新 • • 發佈:2019-02-20
近期在工作中接觸了一套遊戲服務端的程式碼,它是用C#寫的邏輯,其中發現在客戶端登陸的時候,服務端中處理登陸驗證的模組沒有先對賬戶名的合法性進行驗證,而且還直接用sql語句拼接賬戶名的方法去查詢資料庫,很明顯者存在一個SQL注入漏洞,為此我對寫這程式碼的同胞鄙視了一番。鄙視歸鄙視,作為一個5好青年,當然不會讓這個洞存在下去。於是,我想了一會,覺得先要對接收到的賬戶名做合法性驗證,然後sql語句要改成儲存過程。想法有了,馬上動手,合法驗證倒是一會兒解決了,但是之前沒接觸過C#操作資料庫,儲存過程這裡就要查資料了,發現好多資料都是操作sqlserver的,而我要的是mysql。最後,功夫不負有心人,在我東平西湊下,終於完成了我需要的功能。特此寫博於此,記錄一下C#操作MySql儲存過程的方法。:)
環境
Mysql: 6.0.11-alpha-community MySQL Community Server (GPL)
系統:Win7 64bit 專業版
C#:.Net Framework 3.5
C#程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
namespace TestMysql2
{
class Program
{
static void Main(string[] args)
{
MySqlConnection conn = new MySqlConnection("Database=test;Data Source=localhost;User Id='test';Password='test';pooling=true;Minimum Pool Size=5;Maximum Pool Size=10;CharSet=utf8;port=3306;Connect Timeout=3600" );
conn.Open();
MySqlCommand cmd = new MySqlCommand("JugePasswordCorrect", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("?username", MySqlDbType.VarChar, 64);
cmd.Parameters["?username"].Value = "test" ;
cmd.Parameters.Add("?pwd", MySqlDbType.VarChar, 32);
cmd.Parameters["?pwd"].Value = "test";
int rows = Convert.ToInt32(cmd.ExecuteScalar());
if (rows > 0)
{
// 密碼正確
}
conn.Close();
}
}
}
MySql過程
CREATE PROCEDURE JugePasswordCorrect(in username VARCHAR(64), in pwd VARCHAR(32))
BEGIN
SELECT COUNT(*) FROM acctable WHERE account=username AND password=pwd;
END;