簡體   English   中英

解決SQL異常找不到列“ partinfo”或用戶定義的函數或聚合“ partinfo.query”,或者名稱不明確

[英]to solve sql exception Cannot find either column “partinfo” or the user-defined function or aggregate “partinfo.query”, or the name is ambiguous

我使用此pgm從名為partinfo的xmlstring格式的列中獲取值。這是表test中的列之一.partinfo列可以被視為包含許多列的另一個表。我想從該列中的一個讀取數據在這種情況下安裝日期。但是在執行時,我得到一個

SQL異常:找不到列“ partinfo”或用戶定義的函數或聚合“ partinfo.query”,或者名稱不明確。我該如何解決。

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            try {

               SqlConnection con = new 
                   SqlConnection("Data Source=NIP007\\SQLEXPRESS;
                        Initial Catalog=test;User ID=sa;Password=nest123@!");
                con.Open();


            string query =  "SELECT [partinfo].query('.//InstalledDate').value('.','VARCHAR(MAX)')FROM [test]";

            SqlCommand cmd = new SqlCommand(query, con);
           // StringBuilder builder=new StringBuilder();
           // string PartInfo=string.Empty;


            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                string str5 =dr.ToString();
                if (!string.IsNullOrEmpty(str5))
                {

                    textBox1.Text=str5;
                }
            }

        }
        catch(Exception ex)
        {

        }
      }
   }
}

目前尚不清楚您的錯誤究竟在哪里,因為您的SQL應該可以正常工作( 在此處演示 ),並且不返回錯誤,盡管我不確定輸出是否是您想要的,因為它只是將XML中所有已安裝的日期連接在一起作為一個長字符串:

如我先前的回答中所述,如果每行有多個安裝日期,則需要使用CROSS APPLY來將安裝日期作為單獨的行來獲取。

使用CROSS APPLY演示SQL

如果您確實希望將日期連接到一個字符串,那么我建議使用字符串生成器來執行此操作:

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)
{
}

如果這樣做沒有幫助,您可以過帳表Test的DDL和一些示例數據。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM