다음 매개 변수를 사용하여 C# Webmethod에 몇 가지 매개 변수를 보냅니다. 데이터베이스 연결에 WebMethod 테스트 및이 코드가 제대로 한 데이터베이스가 그대로 작동 성공 또는 오류 메시지를AJAX를 통해 C# WebMethod로 백 슬래시 보내기
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
과 같은 데이터베이스 인스턴스가있는 경우이 코드가 손상됩니다.
문제 :
서버 이름 입력에 백 슬래시를 추가, WEBMETHOD는 입력을 허용하지 않으며 나에게주는 Internal server error
메시지.
그러나 두 개의 백 슬래시를 추가하여 (.\\sqlexpress
) WEBMETHOD는 데이터를 수신하지만 지금은 서비스 측면에 두 개의 백 슬래시를 (정확히 .\\sqlexpress
)
질문 : WebMethod
에 단일 백 슬래시를 보낼 수있는 방법
특히 .\sqlexpress
주 :
클라이언트 측의 모든 백 슬래시를 두 개의 백 슬래시로 바꾸고 서버 측의 단일 백 슬래시로 바꿀 수 있음을 알고 있습니다. 나는 더 나은 해결책을 찾는 것이 바람직하다.
잠깐, 말하지만. \\ sqlexpress가 서버 측에서 작동하지 않습니까? . \\ sqlexpress가 서버 측 문자열에있는 경우. \ sqlexpress로 이스케이프해야합니다. 내가 뭔가를 놓치지 않는 한. – MightyLampshade
'builder.DataSource = @ ""+ ServerName;을 시도하십시오. – codingbiz
@MightyLampshade, 어떻게 든 webmethod는 단일 백 슬래시 (일종의 사전 확인 일 수 있습니다)를 좋아하지 않지만 '\\'는 다음 단계에서 유효성 검사를 통과합니다. 두 개의 백 슬래시가 있기 때문에 유효하지 않게됩니다. – AaA