2017-06-03 29 views
0

我有一個程序,我一定要顯示如何從表值函數值在C#

  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 [email protected] AND [email protected]) 
    

    我的方法來連接到服務器:

    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,但我需要將Date和Time分開。我做錯了什麼? 2017年6月4日(上午11:40 CET)更新: 看來我得到期望的結果

    公開名單Dobi_dogodek(IME的字符串,字符串數據) { S =新名單(); 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; 
    } 
    

    現在我只需要按照我的要求來分割字符串,但它是一個更好的(不一定是容易)的方式?

回答

0

運行它時發生了什麼?你是否收到錯誤信息?它是作爲一個整數嗎?你有沒有看到通過使用sql profiler從應用程序獲得的sql服務器? 我會仔細檢查,但我認爲你的問題是你沒有在我們的聲明中引用你的變量的引號,所以當它運行時,它將它們評估爲整數。嘗試"SELECT * FROM dbo.DobiDogodek('@Ime','@Datum')"。自從我使用類似EF的東西以來,這已經很長時間了......

+0

應該有值的標籤是空白的。我是C#中使用存儲過程,用戶定義的函數和表值函數的新手。 – S4NNY1