我有以下简单的代码,它向C#Webmethod发送一些参数。 Web方法测试数据库连接并返回成功或错误消息
TestDb.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestDb.aspx.cs" Inherits="TestDb" %>
<html>
<head>
<script type="text/javascript" src="http://localhost/js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function () {
$("#BtnTestDb").click(function () {
$.ajax({
type: "POST",
url: "TestDb.aspx/CheckDbConnection",
data: '{"ServerName":"' + $("#edtDbServer").val() +
'", "UserName":"' + $("#edtDbUser").val() +
'", "Password":"' + $("#edtDbPassword").val() +
'", "Database":"' + $("#edtDbName").val() + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert("success: " + response.d)
},
error: function (xhr, status, error) {
alert("error:" + error);
}
});
});
});
</script>
</head>
<body>
<table cellpadding="0" cellspacing="4">
<tr>
<td class="">Server</td>
<td><input type="text" id="edtDbServer" /></td>
</tr>
<tr>
<td>Username</td>
<td><input type="text" id="edtDbUser" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" id="edtDbPassword" /></td>
</tr>
<tr>
<td>Database</td>
<td><input type="text" id="edtDbName" /></td>
<td align="left"><input type="button" id="BtnTestDb" value="Test Connection" /></td>
</tr>
</table>
</body>
</html>
TestDb.aspx.cs
using System;
using System.Data.SqlClient;
using System.Web.Services;
public class TestDb: System.Web.UI.Page {
[WebMethod(EnableSession = true)]
public static string CheckDbConnection(string ServerName, string UserName, string Password, string Database) {
if (ServerName != "" && UserName != "" && Password != "" && Database != "") {
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = ServerName;
builder.UserID = UserName;
builder.Password = Password;
builder["Initial Catalog"] = Database;
SqlConnection conn = new SqlConnection(builder.ConnectionString);
try {
conn.Open();
conn.Close();
return "Ok";
} catch (Exception ex) {
return "Error: " + ex.Message;
}
} else {
return "Error: Required fields are missing.";
}
}
}
只要数据库是默认实例(名称中没有反斜杠),此代码就可以正常工作
但是,如果我有一个数据库实例,例如.\sqlexpress
,则此代码会中断。
问题:
通过在servername输入中添加反斜杠,Webmethod将不接受输入并向我发送Internal server error
消息。
但是,通过添加两个反斜杠(.\\sqlexpress
),webMethod将接收数据,但现在我在服务端有两个反斜杠(完全.\\sqlexpress
)
问题:
如何向WebMethod
具体.\sqlexpress
备注:
我知道可以将客户端的所有反斜杠替换为两个反斜杠,并将它们替换回服务器端的单反斜杠。我最好寻找更好的解决方案。
答案 0 :(得分:0)
您可以使用字符@来使字符串不可避免。所以你不能在其中输入转义字符(这是你的服务器认为你通过反斜杠做的事情)。
示例:
string test = "This is a \r\n test";
Console.WriteLine(test);
OUTPUT:
This is a
test
string test2 = @"This is a \r\n test";
Console.WriteLine(test2);
OUTPUT:
This is a \r\n test
我希望这可以帮助你前进: - )。