通过Web服务连接时,我与sql server management studio(SSMS)存在连接问题。
如果我在SSMS中使用帐户xxx登录,我可以执行存储过程。此用户xxx对存储过程的权限以及此存储过程使用的所有表是Alter,控制,执行,引用,取得所有权和视图定义。我认为我需要的就是执行。没问题,存储过程运行正常。
然后,在我的Web服务中,我将其设置为运行此存储过程。我使用javascript和SOAP运行它。它返回一个错误。我测试过它,毫无疑问,服务代码是正确的,以及javascript。我相信问题是权限,或sql中的一些配置。但是我无法弄清楚为什么通过一个有效的帐户连接到sql的sql并不允许我运行这个存储过程。
我是否缺少有关sql权限的内容,例如不使用SSMS时。或者,有什么方法可以测试我的Web服务的连接,这是在C#?
以下是一些代码,展示了我如何将其全部链接起来。
Web服务连接(C#):
<connectionStrings>
<add name="TABLE_NAME" connectionString="Data Source=db_name\instance1;Connect Timeout=30;Initial Catalog=TABLE_NAME;User ID=xxx;PWD=****" />
</connectionStrings>
网络服务代码(C#):
[WebMethod]
public System.Data.DataSet FindThings(string params){
RegistrationDB RegDB = new RegistrationDB();
return RegDB.FindThings(connectionstring, DBHelper.Providers.SqlServer, params);
}
public DataSet FindThings(string connectString, DBHelper.Providers provider, string params){
DBHelper db = new DBHelper();
db.CreateDBObjects(connectString, provider);
DataSet ds;
try{
db.AddParameter("@parameters", params);
ds = db.GetDataSet("[dbo].[procedure_name]", CommandType.StoredProcedure, ConnectionState.Open);
ds.Tables[0].TableName = "Things";
ds.Tables[1].TableName = "YearParameters";
}
finally{
db.connection.Close();
}
return ds;
}
使用Javascript:
var webServiceUrl = "/test.asmx";
var soapEnv = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
<soapenv:Body> \
<FindThings xmlns='http://tempuri.org/'> \
<params>" + varParams + "</params> \
</FindThings> \
</soapenv:Body> \
</soapenv:Envelope>";
$.ajax({
url: webServiceUrl,
type: "POST",
dataType: "xml",
data: soapEnv,
complete: getResult,
contentType: "text/xml; charset=\"utf-8\""
});
function getResult(result, status) {
if(status != "success"){
document.getElementById("results").innerHTML += "<p>Status: " + status + "</p>";
}
}
这就是我在网页上获得输出&#34;状态:错误&#34;的地方。
任何人都知道我应该如何解决这个问题?
答案 0 :(得分:0)
如果您有权访问SQL Server,您还可以查看其中记录的事件或运行Profiler跟踪。可能是您认为用于连接到SQL Server的用户不在您的部署计算机上。通过try / catch获取调试信息是一个很好的解决方案,只是为您提供另一种选择。
答案 1 :(得分:0)
这可能是因为您的服务帐户已被删除。检查一下。我之前遇到过同样的问题。