1. 程式人生 > >C#操作Mysql資料庫的儲存過程

C#操作Mysql資料庫的儲存過程

近期在工作中接觸了一套遊戲服務端的程式碼,它是用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;