Вставить значения массива String в базу данных SQL - PullRequest
1 голос
/ 10 ноября 2011

У меня есть код веб-службы (.ASMX), который принимает строковый массив в качестве параметра, а затем вставляет каждое отдельное значение в базу данных

Например, допустим, у меня есть массив вроде:

            String arr[]={"john","annie"};

Теперь я хочу поместить "john" и "annie" в столбец в моей базе данных

Я реализовал код для него, но он не работает, и значения не вставляются.Также есть ли способ проверить мое приложение веб-службы на 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 ]

3 голосов
/ 10 ноября 2011

Вы можете отладить свой сервис, сделав asmx стартовой страницей и нажав кнопку run для отладки.Вы должны иметь возможность ввести значение в текстовое поле, если вы принимаете параметры.

Я бы сделал это по-другому. Я бы создал 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();

Удачи

2 голосов
/ 10 ноября 2011

Этот код должен выдать ошибку компиляции, так как 'arr' находится вне контекста. Попробуйте перебрать «значения».

2 голосов
/ 10 ноября 2011

Вы зациклили arr вместо значений.arr может вообще не иметь никаких значений.

Если это веб-сервис на C #, вы можете открыть URL-адрес своего веб-сервиса в браузере, например, localhost / yourservice.asmx, и он покажет вам, что функции в веб-сервисе щелкают по функции, и это даст вамформа для запуска функции.

...