【问题标题】:How to get values from table valued function in C#如何从 C# 中的表值函数中获取值
【发布时间】:2017-11-05 01:08:29
【问题描述】:

我有一个程序需要显示

  1. 事件描述 (OpisDogodka)
  2. 位置(Lokacija)
  3. 时间(ura) 我的表值函数:

         [dbo].[DobiDogodek](
         @Ime nvarchar(100), @Datum date)
         RETURNS TABLE AS RETURN (SELECT OpisDogodka AS 'Opisdogodka',Lokacija, Ura FROM Dogodek WHERE Ime=@Ime AND Datum=@Datum) 
    

    我连接服务器的方法:

     public string Dobi_dogodek(string ime,string datum)
    {
        string a="";
        cmd = new SqlCommand("SELECT * FROM dbo.DobiDogodek(@Ime,@Datum)",povezava); //povezava = connectio and it succeeds to connect to the server.
    
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@Ime", ime);
        cmd.Parameters.AddWithValue("@Datum", datum); //how to pass date only?
        try
        {
            SqlDataReader Reader = cmd.ExecuteReader();
            while(Reader.Read())
            {
    
                a = Reader.GetString(0)+" "+Reader.GetString(1)+" "+Reader.GetString(3).ToString(); // get what?
    
                    }
                Uspeh = true;
        }
        catch (Exception e)
        {
            ex = e;
        }
        finally
        {
            povezava.Close();
        }
    
        return a;
    }
    

    我也尝试使用 Datatable 和 datarow。我也不确定如何使用 Date。我知道如何使用 DateTime,但我需要将日期和时间分开。我做错了什么?

    2017 年 4 月 6 日(欧洲中部时间上午 11 点 40 分)更新: 看来我得到了想要的结果

      public List<string> Dobi_dogodek(string ime,string datum)
    {
        s = new List<string>();
        cmd = new SqlCommand("SELECT * FROM dbo.DobiDogodek(@Ime,@Datum)",povezava);
    
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@Ime", ime);
        cmd.Parameters.AddWithValue("@Datum", Convert.ToDateTime(datum));
        dt = new DataTable();
        da = new SqlDataAdapter(cmd);
        da.Fill(dt);
    
        try
        {
            foreach (DataRow dr in dt.Rows)
            {
                s.Add(dr["Opis dogodka"].ToString() + "\\" + dr["Lokacija"].ToString() + "\\" + dr["Ura"].ToString());
            }
    
            Uspeh = true;
        }
        catch (Exception e)
        {
            ex = e;
        }
        finally
        {
            povezava.Close();
        }
    
        return s;
    }
    

    现在我只需要根据我的要求拆分字符串,但是更好(不一定是简单)的方法吗?

【问题讨论】:

    标签: c# sql-server visual-studio tsql


    【解决方案1】:

    试试这个:

    cmd.Parameters.AddWithValue("@Datum", Convert.ToDateTime(datum));

    另见https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx

    【讨论】:

      【解决方案2】:

      当你运行它时发生了什么?您收到错误消息吗?是否将其作为int?您是否看到使用 sql profiler 从应用程序中获取的 sql server 是什么? 我会仔细检查,但我认为你的问题是你没有在我们的语句中为你的变量加上引号,所以当它运行时,它会将它们评估为整数。试试"SELECT * FROM dbo.DobiDogodek('@Ime','@Datum')"。好久没用过 EF 之类的东西了……

      【讨论】:

      • 应该有值的标签是空白的。我是使用 C# 使用存储过程、用户定义函数和表值函数的新手。
      猜你喜欢
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多