我有一个Web服务(.ASMX)代码,它将String Array作为参数,然后在数据库中插入每个单独的值
例如,假设我有类似的数组:
String arr[]={"john","annie"};
现在我想把“john”和“annie”放在我的数据库的一列中
我已经为它实现了一个代码,但是它没有工作,并且没有插入值。还有什么方法可以在我的浏览器中测试我的webservice应用程序在localhost上。
以下是网络服务代码:
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public String getnames(String[] values)
{
try
{
using (SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"))
{
int count = 1;
int rows = 0;
myConnection.Open();
foreach (string student in arr)
{
count++;
using (SqlCommand myCommand = new SqlCommand())
{
myCommand.Connection = myConnection;
myCommand.CommandText = "insert into record values(@pCount, @pStudent)";
SqlParameter param = myCommand.CreateParameter();
param.ParameterName = "@pCount";
param.Value = count;
myCommand.Parameters.Add(param);
param = myCommand.CreateParameter();
param.ParameterName = "@pSudent";
param.Value = student;
rows = myCommand.ExecuteNonQuery();
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return "an error occured";
}
return "success";
}
}
}
答案 0 :(得分:3)
您可以通过将asmx作为起始页并单击“运行”进行调试来调试您的服务。如果您接受参数,则应该能够在文本框中填写值。
我会做的不同我会创建一个Stored proc来处理看起来像这样的工作代码假设一个分隔的字符串,所以它不是一个数组场景..但它的真棒代码..
create Proc [dbo].[InsertINtoRecords] (@sep VARCHAR(32), @s VARCHAR(MAX))
AS
BEGIN
Declare @t TABLE
(
val VARCHAR(MAX)
)
DECLARE @xml XML
SET @XML = N'<root><r>' + REPLACE(@s, @sep, '</r><r>') + '</r></root>'
INSERT INTO @t(val)
SELECT r.value('.','VARCHAR(100)') as Item
FROM @xml.nodes('//root/r') AS RECORDS(r)
insert into record(Count, Student) Select ROW_NUMBER() OVER (ORDER BY val) AS Count, Val
END
然后你的代码只需要这样做
Names = "Johny,Anne,sally"
myCommand.Connection = myConnection;
myCommand.CommandText = "InsertINtoRecords ',', @Names";
rows = myCommand.ExecuteNonQuery();
祝你好运
答案 1 :(得分:2)
你循环arr而不是值。 arr可能根本没有任何价值。
如果这是一个C#webservice,你可以在浏览器中打开web服务的url,比如localhost / yourservice.asmx,它会显示webservice中的函数点击一个函数,它会给你一个表格给你触发功能。
答案 2 :(得分:2)
此代码应抛出编译错误,因为'arr'不在上下文中。尝试循环“值”。