Web Service中操作MySQL数据库
注:本文还是Flex + Web Service + MySQL系列Blog中的一篇
上一篇实现了在Web Service中连接MySQL数据库,其实就是ASP.NET中连接MySQL数据库,并操作数据库。但在实际中,我们首先要判断连接的数据库是否存在,关于怎么样去判断,上一篇已经做了介绍,在这篇Blog中主要介绍当要连接的数据库不存在的时候,怎么去创建数据库。
其实在代码中创建数据库有很多的方法,比如SQL Server的osql和isql,但在MySQL中我没发现这样好的命令,所以只有另想办法了。在看MySQL Connector/NET的文档时,我发现了MySQLScript这个class,介绍如下:
Provides a class capable of executing a SQL script containing multiple SQL statements including CREATE PROCEDURE statements that require changing thedelimiter
显然可以使用这个class来执行一个MySQL脚本。已经一个简单的数据脚本文件,已经在上一篇中贴出来了(http://blog.csdn.net/li_007/archive/2008/12/15/3522956.aspx),语法可以参考它,还有很多MySQL高级的脚本语法可以参考MySQL的Help。
看Help知道MySQLScript的Script是一个string,所以需要将.sql的脚本文件读成一个string中,具体实现如下:
private string strCurDir = "";
public Service ()
{
//Uncomment the following line if using designed components
//InitializeComponent();
strCurDir = AppDomain.CurrentDomain.BaseDirectory.ToString();
}
private string GetMySQLScripts()
{
StreamReader fileReader = File.OpenText(strCurDir + "//App_Data//new_db.sql");
string strText = "";
while (-1 != fileReader.Peek())
{
string str = fileReader.ReadLine().Trim();
if (true == str.Contains("--")) //为了出掉.sql脚本中注释代码
{
str = "";
}
else
{
strText += str;
}
}
fileReader.Close();
return strText;
}
然后就是MySQLScript类的具体应用了,其实很简单,就像MySQLCommand一样使用,代码如下:
private void OnScriptCompleted(object sender, EventArgs Args)
{
StreamWriter runInfo = new StreamWriter(strCurDir + "//App_RunInfo//AppRunInfo.txt");
runInfo.WriteLine(DateTime.Now.ToLocalTime().ToString() + " Successfully Executed.");
runInfo.Close();
}
private void OnScriptError(object sender, MySqlScriptErrorEventArgs Args)
{
StreamWriter runInfo = new StreamWriter(strCurDir + "//App_RunInfo//AppRunInfo.txt");
runInfo.WriteLine(DateTime.Now.ToString() + " Error : "
+ Args.StatementText.ToString());
runInfo.Close();
}
private void InitDataBase()
{
string query = "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA";
MySqlConnection conn = new MySqlConnection ("server=127.0.0.1;user=root;password=1;database=information_schema");
MySqlCommand command = new MySqlCommand(query, conn);
conn.Open();
MySqlDataAdapter da = new MySqlDataAdapter();
da.SelectCommand = command;
DataSet ds = new DataSet();
da.Fill(ds);
String str = ds.GetXml();
if (false == str.Contains("new_db")) //不存在要连接的数据库,就用脚本创建
{
string scripts = GetMySQLScripts();
MySqlScript myScript = new MySqlScript(conn, scripts);
myScript.Error += new MySqlScriptErrorEventHandler(OnScriptError); //出错事件响应函数
myScript.ScriptCompleted += new EventHandler(OnScriptCompleted); //脚本成功执行事件响应函数
myScript.Execute();
}
conn.Close();
}
注意在实际的项目中,需要为数据库连接连接,脚本执行,文件读写等等这些加上异常处理。本文也是项目实际中的部分功能的演示,也是本人学习中点点滴滴的记录。