Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要解决sql异常,无法找到任何列";partinfo“;或用户定义的函数或聚合;partinfo.query“;,或者名称不明确_Sql_Sql Server_For Xml - Fatal编程技术网

要解决sql异常,无法找到任何列";partinfo“;或用户定义的函数或聚合;partinfo.query“;,或者名称不明确

要解决sql异常,无法找到任何列";partinfo“;或用户定义的函数或聚合;partinfo.query“;,或者名称不明确,sql,sql-server,for-xml,Sql,Sql Server,For Xml,我使用此pgm从名为partinfo的xmlstring格式的列中获取值。该列是表test中的一列。partinfo列可以被视为包含许多列的另一个表。我希望从本例中安装日期为的该列中读取数据。但在执行时,我获取一个 sql异常:找不到“partinfo”列或用户定义的 函数或聚合“partinfo.query”,或名称不明确。如何 我能解决这个问题吗 命名空间WpfApplication1 { /// ///MainWindow.xaml的交互逻辑 /// 公共部分类主窗口:窗口 { 公共主

我使用此pgm从名为partinfo的xmlstring格式的列中获取值。该列是表test中的一列。partinfo列可以被视为包含许多列的另一个表。我希望从本例中安装日期为的该列中读取数据。但在执行时,我获取一个

sql异常:找不到“partinfo”列或用户定义的 函数或聚合“partinfo.query”,或名称不明确。如何 我能解决这个问题吗

命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
试一试{
SqlConnection con=new
SqlConnection(“数据源=NIP007\\SQLEXPRESS;
初始目录=测试;用户ID=sa;密码=nest123@!);
con.Open();
string query=“从[test]”中选择[partinfo].query('.//InstalledDate').value('.','VARCHAR(MAX)');
SqlCommand cmd=新的SqlCommand(查询,con);
//StringBuilder=新的StringBuilder();
//string PartInfo=string.Empty;
SqlDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
字符串str5=dr.ToString();
如果(!string.IsNullOrEmpty(str5))
{
textBox1.Text=str5;
}
}
}
捕获(例外情况除外)
{
}
}
}
}

不清楚错误的确切位置,因为您的SQL应该正常工作(),并且不返回错误,尽管我不确定输出是否是您想要的,因为它只是将XML中的所有安装日期连接为一个长字符串:

正如我在前面的回答中所说的,如果您每行有多个安装日期,您将希望使用交叉应用将安装日期作为单独的行来获取

如果您确实希望将日期连接到一个字符串,那么我建议使用字符串生成器来执行此操作:

try
{
    string query = @"SELECT  InstalledDate = x.value('InstalledDate[1]', 'DATETIME')
                    FROM    dbo.Test
                            CROSS APPLY PartInfo.nodes('/DocumentElement/PartInfo') p (x);";

    using (var con = new SqlConnection("Data Source=NIP007\\SQLEXPRESS;Initial Catalog=test;User ID=sa;Password=nest123@!"))
    using (var cmd = new SqlCommand(query, con))
    {
        con.Open();
        using (var dr = cmd.ExecuteReader())
        {
            var builder = new StringBuilder();
            while (dr.Read())
            {
                string str5 = dr.GetString(0);
                if (!string.IsNullOrEmpty(str5))
                {
                    builder.Append(str5 + ",");
                }
            }
            textBox1.Text = builder.ToString();
        }
    }

}
catch (Exception ex)
{
}
如果这没有帮助,您可以发布表测试的DDL和一些示例数据


谢谢

测试中XML列的名称是什么?我猜这不是PartInfo。另外,我猜这是您上一个问题的后续问题。您的XML中每个DocumentElement是否可能有多个PartInfo?它是PartInfo.ya。它与该问题相关。是的,XML中每个DocumentElement可能有多个PartInfo。但我无法识别这是什么原因例外。请告诉我一个解决办法。
try
{
    string query = @"SELECT  InstalledDate = x.value('InstalledDate[1]', 'DATETIME')
                    FROM    dbo.Test
                            CROSS APPLY PartInfo.nodes('/DocumentElement/PartInfo') p (x);";

    using (var con = new SqlConnection("Data Source=NIP007\\SQLEXPRESS;Initial Catalog=test;User ID=sa;Password=nest123@!"))
    using (var cmd = new SqlCommand(query, con))
    {
        con.Open();
        using (var dr = cmd.ExecuteReader())
        {
            var builder = new StringBuilder();
            while (dr.Read())
            {
                string str5 = dr.GetString(0);
                if (!string.IsNullOrEmpty(str5))
                {
                    builder.Append(str5 + ",");
                }
            }
            textBox1.Text = builder.ToString();
        }
    }

}
catch (Exception ex)
{
}