毕业设计做了一个数据库,结果导师非得让写一个网站便于对外公开。没办法,就赶着鸭子上架,用Visual Studio写了个APS.NET的网站(C#)。C#连接MySQL倒是简单,之前一直用MySQLDriverCS,就很快写了一个。步骤:
1. 安装MySQLDriverCS。 版本:MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe
地址:http://sourceforge.net/projects/mysqldrivercs/
找到安装文件夹中的MySQLDriverCS.dll,在VS中添加引用。
或者直接百度个MySQLDriverCS.dll在VS中添加引用就可以了。
2. 代码。
using System.Data;
using MySQLDriverCS;
...
MySQLConnection conn = null;
MySQLCommand comm = null;
MySQLDataReader dr = null;
...
try
{
conn = new MySQLConnection (new MySQLConnectionString("localhost", "database", "root", password).AsString); //password是密码
conn.Open();
comm = new MySQLCommand(sql, conn); //sql是query
dr = comm.ExecuteReaderEx();
while (dr.Read())
{
//直接dr[0]或者dr["ColumnName"]就读出来了。
}
//或者这样用
MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);
DataSet ds = new DataSet();
mda.Fill(ds, "Table1");
}
catch
{
}
finally
{
if (dr != null && !dr.IsClosed)
{
dr.Close();
}
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close();
}
}
3. 值得注意的是,Connection什么的要在try之外定义,然后之后检查是否关闭。每次都要确定它们该关闭的都关闭了。最开始的时候总觉得没什么区别,后来发现不这样的话,VS的虚拟IIS老自动出错退出,虽然错误明明都是在try里发生的。纠结我半天。
还算顺利的就把网站写好了,毕竟没多少东西,只是个数据库而已。然后就向学校的网管申请服务器,网管虽然正在外地,但他的小弟办事也还算快。很快就弄好了。我登陆后,发现服务器慢的要死,仔细一看处理器居然是AMD的皓龙Operon 2220。(系统是Windows 2008 R2 64位。)无所谓了,反正网站能跑就行了。
于是花了一上午给安装需要用的JAVA和MySQL。。。打开IIS发现基本什么都没装。。这个也简单,就Roles->IIS下点Add Role Services就可以了,把ASP什么的该装的都装了。注意如果有静态内容的话,要安装HTTP Static Content(静态内容)和Directory Browsing(文件夹浏览)。安装倒是挺快。网站放上去,浏览器试了下。。。果断带不开!
错误就是MySQLDriverCS用不了!Google百度了半天没找到解决方案,基本都说别用,直接用ODBC。。
好吧,重写程序。步骤:
1. 安装Microsoft ODBC for SQL Server:http://www.microsoft.com/en-us/download/details.aspx?id=36434
或者直接从网上下载Microsoft.Data.Odbc.dll后在VS中添加引用。
找到Microsoft.Data.Odbc.dll然后在VS中添加引用。
安装MySQL Connector ODBC: http://dev.mysql.com/downloads/connector/odbc/
最新的版本貌似是5.3.2。我开始也安装了,后来弄了半天都弄不对。从网上看的例子都是用的3.51版,于是我就装了3.51版。
安装完成后,可以在控制面板里找到管理工具(Administrative Tools),打开Data Sources(ODBC),在驱动(Drivers)里应该能找到名为MySQL ODBC 3.51 Driver的驱动。
2. 代码跟MySQLDriverCS的很类似。
using Microsoft.Data.Odbc;
...
String ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;Database=database;UID=root;PASSWORD=12345;OPTION=3";
OdbcConnection conn = null;
OdbcCommand cmd = null;
OdbcDataReader dr = null;
try
{
conn = new OdbcConnection(ConnectionString);
conn.Open();
cmd = new OdbcCommand(sql, conn);//sql是querydr = cmd.ExecuteReader();
while (dr.Read())
{
//直接dr[0]或者dr["ColumnName"]就读出来了。
}
//或者这样用
OdbcDataAdapter mda = new OdbcDataAdapter(sql, conn);
DataSet ds = new DataSet();
mda.Fill(ds, "Table1");
}
catch
{
}
finally
{
if (dr != null && !dr.IsClosed)
{
dr.Close();
}
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close();
}
}
还好代码差别不大,所以写完的也很快。但发现网站依然运行不了!
我又是一阵Google+百度,都没找到解决办法。我以为是.NET的版本不对,就卸载了重装,发现问题更加严重了。。。错误大体是这样的
无法识别的属性targetFramework,注意大小写云云。。
Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
网上统一的说法是.Net Framework的版本不对。但是我明明安装的是跟之前一样的版本(4.5),纠结了半天。后来发现原来是IIS中的设置在卸载.Net Framework的时候自动改成低版本了,而重装后没有改回来。。于是在IIS中的change .Net framework version从2.0改成了4.0,重启,发现。。。依然不行!你妹的。
纠结了半天之后发现,原来是要在网站的ASP的高级设定(Advanced Settings)中的Application pool的版本改成ASP.NET v4.0,才能算真正改了。。然后网站终于打开了!
然后就突然发现,每次要连接数据库的时候,网页都会报错(跳到我自己设的出错页)。。错误是这样的:
System.EntryPointNotFoundException: Unable to find an entry point named 'InterlockedIncrement' in DLL 'kernel32.dll'. at System.Data.Common.SafeNativeMethods.InterlockedIncrement(IntPtr lpAddend) at Microsoft.Data.Odbc.DBCWrapper..ctor() at Microsoft.Data.Odbc.OdbcConnection..ctor(String connectionString)
这个问题在VS中没有出现,只是实际运行网页的时候才有。百度的结果是32位和64位系统的冲突,但死活没搜出解决方案。。后来找到了解决办法:在application pool里,ASP.NET 4.0的高级设置里,有一项Enable 32-bit applications属性,把它从false改为true就可以了。。。汗死。
于是网站正常运行了。。发现虽然那台服务器虽然很慢,但网页一点都不慢。。比较满意。。
再后来,由于一些原因,需要对网站里可以下载的东西进行修改。修改之后,发现网站里本来能下载的东西全都打不开了!上网搜解决方案,一致答案是设置那个文件夹的权限,但是我明明已经开了啊。。。
后来发现错误是IIS中Directory Browsing被禁掉了。。重新打开就好了。
之前学过C#写网站的课,得了97分的高分(木哈哈哈哈),还略自满。但是这次发现写程序只是好小好小的一部分啊。IIS的设置也是应该好好的学习下的。发现百度对解决问题的帮助好小啊,搜素的网页基本不符合我本意,只能依稀看到些零碎。还是开始写博客记录这些经验比较好。以上。