菜鸟的ASP.NET连接MySQL小记

来源:互联网 发布:网络理财平台哪个好 编辑:程序博客网 时间:2024/06/04 23:19

    毕业设计做了一个数据库,结果导师非得让写一个网站便于对外公开。没办法,就赶着鸭子上架,用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是query

dr = 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();
}
}

    Y的在那台破电脑上装VS差点没把我急死,感觉装了一下午。。。

    还好代码差别不大,所以写完的也很快。但发现网站依然运行不了!

    我又是一阵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的设置也是应该好好的学习下的。发现百度对解决问题的帮助好小啊,搜素的网页基本不符合我本意,只能依稀看到些零碎。还是开始写博客记录这些经验比较好。以上。




0 0
原创粉丝点击