将 XML 数据传递给存储过程并从中获取返回值 c#?

雷切尔·莫里斯

我试图将xml数据作为参数传递给存储过程并从存储过程中获取返回值。但出于某种原因,存储过程只返回最后一行的数据,我想知道如何解决该问题。这是我到目前为止所尝试的。

C#代码:

string[] mobilenum = { "254720516010", "254718488944" };
List<string> regtoken = new List<string>();

protected void Page_Load(object sender, EventArgs e)
{
    DataTable table = new DataTable();
    DataSet ds = new DataSet();

    DataTable ts = new DataTable();
    ts.Columns.Add("MobileNumber", typeof(string));
    foreach (string c in mobilenum)
    {
        ts.Rows.Add(c);
    }

    DataSet dset = new DataSet();
    dset.Tables.Add(ts);
    string res = dset.GetXml();

    String con = @"Data Source=***********;Initial Catalog=Peace;User ID=*****;Password=****";

    using (SqlConnection conn = new SqlConnection(con))
    {

        SqlCommand cmd = new SqlCommand("p_getPushToken1", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add(new SqlParameter("@DetailRecord", res));
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            da.Fill(ds, "Dataitems");
        }

        if (ds != null)
        {
            if (ds.Tables.Count > 0)
            {
                if (ds.Tables["Dataitems"].Rows.Count > 0)
                {
                    foreach (DataRow dr in ds.Tables["Dataitems"].Rows)
                    {

                        regtoken.Add(dr["Token"].ToString());
                    }
                }
            }
        }
    }
}

res (XML) 字符串的值是:

<NewDataSet>
  <Table1>
    <MobileNumber>254720516010</MobileNumber>
  </Table1>
  <Table1>
    <MobileNumber>254718488944</MobileNumber>
  </Table1>
</NewDataSet>

SQL SERVER 存储过程:

USE [Peace]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[p_GetPushToken1]
(
    @DetailRecord   XML
)
as    
    SELECT
        MobileNumber,
        FirstName,
        LastName,
        Token
    FROM tb_Registration WHERE MobileNumber IN(
    SELECT  Customer.x.value('MobileNumber[1]', 'varchar(20)')
    FROM @DetailRecord.nodes('NewDataSet/Table1') AS Customer(x))
Shnugo

这部分 - 隔离 - 返回两个手机号码:

DECLARE @DetailRecord XML=
N'<NewDataSet>
  <Table1>
    <MobileNumber>254720516010</MobileNumber>
  </Table1>
  <Table1>
    <MobileNumber>254718488944</MobileNumber>
  </Table1>
</NewDataSet>';

 SELECT  Customer.x.value('MobileNumber[1]', 'varchar(20)')
 FROM @DetailRecord.nodes('NewDataSet/Table1') AS Customer(x)

您在IN-clause中使用此子选择来获取有关tb_registration此手机号码所在位置的所有记录

这应该工作...

如果您没有得到我认为的预期结果,则您在字符串级别上的比较无法正常工作。可能是,手机号码以某种方式存储在您的表中(空格、分隔符、varchar(20) 可能很小)。

更新

尝试将您的 SP 语句放在一个简单的查询窗口中,并使用declare我在上面所做类似操作来模拟参数。你得到不止一排吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据传递给 spyOn 和返回值

来自分类Dev

C#/ Dapper将XML CLOB传递给Oracle存储过程导致LPX-00210

来自分类Dev

C#-将参数传递给存储过程并返回IEnumerable

来自分类Dev

Webservice返回XML数据,C#将值视为空

来自分类Dev

将C#数据传递给MySQL

来自分类Dev

通过管道将数据传递给 C 程序

来自分类Dev

从C#,如何将Clob值传递给oracle存储过程

来自分类Dev

从C#集合将GUID数组传递给存储过程

来自分类Dev

从C#将参数传递给存储过程

来自分类Dev

从C#集合将GUID数组传递给存储过程

来自分类Dev

将 XML 传递到存储过程时删除 XML 声明

来自分类Dev

将参考从Python传递到用swig包裹的c ++函数以获取返回值

来自分类Dev

将xml文档从php传递到c#

来自分类Dev

C#将XML解析为列表返回空列表

来自分类Dev

将XML从Oracle Procedure返回到C#Restful服务

来自分类Dev

将变量数据传递给其他形式的变量将变为空C#WPF

来自分类Dev

将多个值传递给存储过程

来自分类Dev

将数据更新到XML文件C#

来自分类Dev

将数据从C#类传输到XML文件

来自分类Dev

将C#模型序列化为xml数据

来自分类Dev

需要帮助将XML数据导入C#对象

来自分类Dev

C#将大型数据库导出为XML

来自分类Dev

将 XML 数据转换为 C# 类

来自分类Dev

C# - YAXLib:将数据导出到 XML 文件

来自分类Dev

我得到了XML数据,现在如何将XML数据保存在Objective C中?

来自分类Dev

如何将C结构传递给Python以获取数据?

来自分类Dev

将Javascript变量传递给C#函数aspx并从其返回到aspx页面

来自分类Dev

如何将xml数据从一个存储过程传递到另一个存储过程?

来自分类Dev

Qt C++ - 如何成功地将数据传递给子进程?

Related 相关文章

热门标签

归档