您现在的位置是:探索 >>正文
html连接sqlserver
探索7396人已围观
简介用HTML直接连SQL Server?这条路走不通。浏览器里跑的JavaScript没有TCP socket权限,不可能直接跟1433端口的数据库握手。我见过太多新手卡在这一步,搜半天“html连接s ...
用HTML直接连SQL Server?连接这条路走不通。浏览器里跑的连接JavaScript没有TCP socket权限,不可能直接跟1433端口的连接数据库握手。我见过太多新手卡在这一步,连接搜半天“html连接sqlserver代码”,连接最后找到的连接全是带`ActiveXObject`的老古董——那玩意儿只在IE里管用,现在谁还用IE?连接
真实场景是这样的:你有个HTML页面,上面放个查询按钮,连接用户点一下,连接数据从SQL Server里出来。连接中间必须有个“二传手”。连接这个二传手可以是连接ASP.NET、PHP、连接Node.js、连接Python Flask,连接随便什么跑在服务器上的东西。HTML负责展示,后端负责连数据库,两者之间用HTTP说话。
一个能跑的最小例子
假设你有个SQL Server,里面有个`Users`表,字段是`Id`、`Name`、`Email`。后端用Node.js加`mssql`包,三十行代码搞定。
const express = require('express'); const sql = require('mssql'); const app = express(); const config = { user: 'sa', password: '你的密码', server: 'localhost', database: 'TestDB', options: { trustServerCertificate: true } }; app.get('/api/users', async (req, res) => { try { await sql.connect(config); const result = await sql.query`SELECT * FROM Users`; res.json(result.recordset); } catch (err) { res.status(500).send(err.message); } }); app.listen(3000); 前端HTML里写个`fetch`:
<button onclick="loadUsers()">加载用户</button> <div id="output"></div> <script> async function loadUsers() { const res = await fetch('http://localhost:3000/api/users'); const data = await res.json(); document.getElementById('output').innerHTML = data.map(u => `<p>${ u.Name} - ${ u.Email}</p>`).join(''); } </script> 注意那个`trustServerCertificate: true`。SQL Server默认用自签名证书,Node的`mssql`包会拒绝连接。不加这行,你会看到`self signed certificate`错误,然后怀疑人生。我当初在这卡了四十分钟。
为什么不能绕过后端
有人想用WebSocket直连数据库。技术上,WebSocket只是协议,底层还是TCP,浏览器依然不让你随便开socket。就算能开,把数据库账号密码写在HTML里,等于把家门钥匙插在门锁上还贴个纸条“欢迎光临”。
另一个坑:CORS。前端跑在`localhost:5500`,后端跑在`localhost:3000`,浏览器会拦请求。后端加一行`app.use(cors())`,或者手动设`Access-Control-Allow-Origin`。别问为什么,浏览器安全模型就这么设计的。
老系统里的怪东西
维护过一套2012年的ASP.NET WebForms项目,里面用`SqlDataSource`控件直接拖到`.aspx`页面上,配置连接字符串,GridView自动绑数据。那套东西确实“HTML里连了SQL Server”——但那是服务器端控件在渲染前就把数据取好了,发给浏览器的HTML里只有`<table>`标签,没有一行数据库代码。微软把复杂度藏起来了,不是消灭了。
所以下次看到“HTML连接SQL Server”的需求,先问清楚:你是要浏览器直连,还是要个网页界面查数据?前者不存在,后者找个后端语言写个API。别在`