asp连接mysql数据库的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp连接mysql数据库的问题相关的知识,希望对你有一定的参考价值。

我第一次用asp连接mysql数据库,odbc也装了,可还是提醒没有数据源。
错误代码:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
/zhaopin/Conn.asp, 第 6 行
<%
Set Conn=Server.CreateObject("ADODB.Connection")
servername="XINZHI-SERVER"
dbname="User_info"
StrConn="Driver= mysql odbc 3.51 driver;Server=(localhost);DataBase=hr;Uid=root;Pwd=root"
Conn.open strConn
if err then
err.Clear
Set Conn = Nothing
Response.Write "数据库正在调整中,请稍候再试。"
Response.End
end if

'关闭数据库链接
Sub dbend()
conn.Close
Set conn = Nothing
End Sub
%>

admin是文本字符
把rs.open "select * from pw_member where username='admin'",conn,1,1
改为
rs.open "select * from pw_member where username='"换成变量,文本字符可变化"'",conn,1,1
还有就是 报什么错误 最好贴出来 语句上没有错误具体问题得看 错误提示
答案补充
你是不是在sql表里面没有设置自动编号?
服务器尝试更新数据库表的自动编号字段或者尝试在自动编号字段中插入记录。
由于自动编号域由数据库系统自动填充,因此任何从外部用值填充这些域的尝试都会失败。
服务器正在更新或插入的数据对于该数据库字段而言是错误的类型,
例如将日期插入布尔型(是/否)字段,将字符串插入数值字段,或者将格式不正确的字符串插入"日期/时间"字段。
答案补充
这种错误就是在向数据库写入数据的时候出现了类型不匹配、字段大小超出、锁定模式错误等,或者记录集没有及时关闭。
例如,配置的某一字段长度为15,在sql语句中确试图插入16位的字符;
或者试图插入全角半角模式不正确的字段;
或者使用了错误的记录集锁定方式,rs.open sql,conn,x,y,根据某些blog文章显示,修改打开记录集的方式可能会解决这个问题。
比如把rs.open sql,conn,1,1 换成rs.open sql,conn,3,1
要是还不行的话 你把69行代码帖出来!
答案补充
比如把rs.open sql,conn,1,1 换成rs.open sql,conn,3,1
参考技术A 你的连接字符串有问题,用udl方法生成。再试试看。

ASP.NET Core MVC MySQL 服务器连接

【中文标题】ASP.NET Core MVC MySQL 服务器连接【英文标题】:ASP.NET Core MVC MySQL Server Connection 【发布时间】:2020-10-11 21:43:47 【问题描述】:

我在尝试建立与我在 ASP.NET Core MVC 3.1 中使用 Windows Server 2019 设置的服务器的连接时遇到问题。

我在服务器上安装的唯一东西是 MySQL 套件和 IIS。该服务器也使用 VirtualBox 在我的计算机上本地托管,并使用桥接适配器进行设置。

ASP.NET Core MVC 项目是使用 Visual Studio 中的默认 MVC 选项创建的。此处不包含第三方服务。

在 ASP.NET Core 中,连接字符串如下所示:

"ConnectionStrings": 
     "ApplicationContext": "Server=<server IP/host name>;Initial Catalog=testdatabase;User ID=testuser;Password=testpassword;"

使用上述连接字符串运行项目时,我的浏览器中出现以下错误:

Win32Exception: 系统找不到指定的文件。未知 位置

SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器是 未找到或无法访问。验证实例名称是否为 正确,并且 SQL Server 配置为允许远程连接。 (提供者:TCP 提供者,错误:0 - 连接尝试失败 因为连接方在一段时间后没有正确响应 时间,或建立连接失败,因为连接的主机有 没有回应。) Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, uint waitForMultipleObjectsTimeout, bool allowCreate, bool onlyOneCheckConnection, DbConnectionOptions userOptions, out DbConnection内部连接)

但是,我终其一生都无法弄清楚为什么这不起作用。我已经浏览了很多互联网,但对 ASP.NET 如何与 MySQL 服务器交互以及我是否使用了不正确的参数知之甚少。我试过使用额外的参数,比如Trusted_Connection=True/False;MultipleActiveResultSets=True/False; 希望产生任何不同的结果,但仍然没有(我特别提到这两个,因为它们是默认出现的)。

为了测试服务器是否是罪魁祸首,我使用带有 PDO 的 PHP v7 复制了上面的连接字符串。

<?php
$server = "<server IP/host name>";
$port = 3306;
$db = "testdatabase";
$username = "testuser";
$password = "testpassword";

try 
    $conn = new PDO("mysql:host=$server;port=$port;dbname=$db", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected";
 catch (PDOException $err) 
    echo $err;


if ($conn) 
    $query = "SELECT * FROM testTable";
    $result = $conn->query($query);
 else 
    echo "Query failed";


foreach ($entity as $result) 
    echo "<br />" . $result["Id"];

?>

我可以确认这个 PHP 代码 100% 工作。

此外,我还测试了使用 Azure MySQL 以及使用在 Azure 中创建的生成的连接字符串来建立服务器连接。这也 100% 有效。

这让我相信我的 Windows Server 是罪魁祸首,它可能与一项或多项特定服务被禁用/阻止有关。但同时,如果PHP代码能够建立连接并抓取数据,那肯定不会是Connection String代码造成的吧??

我认为这个问题可能与我的控制器代码中的逻辑有关。

如果有人能提供一些见解,我将不胜感激。它可能只是超级简单的东西。

【问题讨论】:

糟糕,忘记在 JSON ConnectionString 中将“,3306”附加到“Server=”。这应该可以消除我发布的第二个错误。 当您说“服务器”时...我可以理解为您的意思是“MySQL 服务器”吗?如果是这样,那么我认为您的 .NET 连接字符串可能是错误的。它看起来像 MS SQL Server 数据库的连接字符串。 connectionstrings.com/mysql 可能会帮助您找到正确的连接字符串格式。我们还可以看到您在应用程序中用于与数据库通信的实际代码吗? “我认为这个问题可能与我的控制器代码中的逻辑有关”...您认为向我们展示这一点并描述您的预感是一个好主意吗? 还有什么原因导致“找不到文件”错误?您没有包含任何行号或代码引用来指向发生错误的位置。你试过调试它吗? P.S.您决定安装一个单独的 virtualbox 实例而不是直接在您的 PC 上安装 MySQL 有什么特别的原因吗?这对于开发/测试目的来说会简单得多。另外... .NET 代码是在 virtualbox 实例中运行,还是在您的主操作系统中运行(可能通过 Visual Studio)?这并不完全清楚。 【参考方案1】:

我会把这个留给路过的人。

Tl;dr:“Startup.cs”中的代码是导致此问题的驱动因素,即涉及向应用程序添加数据库上下文的部分。确保 Ubuntu 服务器也不会被防火墙策略阻止也很重要。

默认方法(使用 Microsoft SQL):

services.AddDbContext<DataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DataContext")));

正确方法(使用 Pomelo):

services.AddDbContext<DataContext>(options => options.UseMySql(Configuration.GetConnectionString("DataContext")));

请注意“.UseSqlServer()”与“.UseMySql()”的区别。这是因为在我的 Ubuntu 服务器中,它是使用 MySQL 作为驱动程序而不是 MSSQL 驱动程序设置的。尝试使用“默认方法”的效果是导致尝试建立后端连接时出现各种问题。

安装参考:https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

以下部分与解决方案没有直接关系,但提供了我如何解决此问题的见解。

为了验证这一点,我还必须检查 Ubuntu 服务器本身的其他因素。即通过防火墙启用端口 3306,更改“mysql.cnf”文件中的“bind-address”参数,当然还要检查正在使用的 SQL 驱动程序本身的实际版本。

启用端口 3306:https://www.digitalocean.com/community/tutorials/how-to-allow-remote-access-to-mysql

更改“绑定地址”参数:https://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

检查 SQL 驱动版本:https://phoenixnap.com/kb/how-to-check-mysql-version

应用这些更改后(以及使用 Pomelo 的“.UseMySQL()”方法),我运行了我的应用程序,你瞧,涉及使用数据库连接的页面没有产生任何错误。它只是要求我“应用迁移”,就好像我正在使用本地数据库并且忘记更新数据库一样。

【讨论】:

这个来源docs.microsoft.com/en-us/ef/core/providers/… 对识别 SQL 驱动程序也有很大帮助。【参考方案2】:

由于您获得的是SqlException,因此您必须尝试使用​​System.Data.SqlClientMicrosoft.Data.SqlClient 连接(到MySQL 服务器)。这不受支持;这些仅适用于 Microsoft SQL Server。

安装MySqlConnector 并使用MySqlConnection 类建立连接。完整的连接字符串参考见https://mysqlconnector.net/connection-options/,但最简单的连接字符串将是"Server=&lt;server IP/host name&gt;;Database=testdatabase;User ID=testuser;Password=testpassword;"

【讨论】:

可以确认这对我的问题有帮助。非常感谢。

以上是关于asp连接mysql数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Boilerplate连接MySQL数据库

ASP.net怎么连接mysql数据库进行数据操作?

ASP.NET Core 项目中的 MySql 连接字符串错误

asp.net连接MySql查询数据并返回

经验之谈:MySQL与ASP.NET配合更强大[2]

asp.net 水晶报表连接mysql数据库