将String数组的值插入SQL数据库

时间:2011-11-10 15:22:36

标签: c# asp.net web-services sql-server-2008

我有一个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";
        }
     }
   }

3 个答案:

答案 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'不在上下文中。尝试循环“值”。