2017-12-27 1727 views
0

事實證明,我與SignalR,凡在HTML視圖我提出以下要求到客戶工作:SelectCommand.Connection屬性尚未初始化。 MySQL的

var myHub = $.connection.myHub; 
    var direccionWeb = $("#direccionWeb").val().toString(); 
    $.connection.hub.url = direccionWeb + "/signalr"; 
    $.connection.hub.start().done(function() { 
     myHub.server.broadcastMessageToPrinterReportTicket(global_venta, global_mesa, nombregarzon, idgrupo, grupo); 

    }).fail(function (error) { 
     console.error(error); 
    }); 

輪轂文件我有以下幾點:

public void BroadcastMessageToPrinterReportTicket(String global_venta,String global_mesa,String nombregarzon,String idgrupo, String grupo) 
{ 
    string namePrinter = group; 
    DataTable dt = new DataTable(); 

    string sql = "SELECT " + 
     "cant," + 
     "det " + 
     "FROM producto " +     
     "WHERE [email protected]_venta AND venta>0 AND [email protected] AND comandasd.pedido=0"; 
    conexion.conectar(); 

    using (MySqlCommand command = new MySqlCommand(sql, conexion.con)) 
    { 
     command.Parameters.AddWithValue("@global_venta", global_venta); 
     command.Parameters.AddWithValue("@idgrupo", idgrupo); 
     using (MySqlDataAdapter reader = new MySqlDataAdapter(command)) 
     { 
      using (MySqlDataAdapter sda = new MySqlDataAdapter(command)) 
      { 
       sda.Fill(dt); 
      } 
     } 
    } 
    conexion.cerrar(); 


    Clients.All.printReport(datos, ........); 
} 

包含連接類的文件如下:

public void conectar() 
{ 
    try 
    { 
     string ip = HttpContext.Current.Session["ip"].ToString(); 
     string db = HttpContext.Current.Session["db"].ToString(); 
     string user = HttpContext.Current.Session["user"].ToString(); 
     string pass = HttpContext.Current.Session["pass"].ToString(); 

     con = new MySqlConnection("server=" + ip + ";user id=" + user + ";password=" + pass + ";database=" + db + ";port=3306;Allow User Variables=true"); 
     con.Open(); 
    } 
    catch 
    { 

    } 
} 

但是當我嘗試將數據添加到數據表,也就是上線,其中sda.Fill(DT)說,出現以下錯誤:SelectCommand.Connection屬性尚未初始化。

奇怪的是,當我使用它是在控制器中聲明相同的功能,它工作正常。我想要的是能夠使用BroadcastMessageToPrinterReportTicket接收的參數獲取數據表並將其發送給客戶端。

如果有人知道如何糾正錯誤,或者一些幫助,將不勝感激。

問候

+0

您是否能夠確認如果你有一個通過集線器的實際會話?我懷疑不會,意味着你的連接字符串不包含IP,Db,用戶或傳遞。另外,是否有理由使用會話來存儲數據庫信譽,而不是說web.config? – Darren

+0

@Darren Tengo un archivo clase que uso para conectarme。在這裏您可以找到關於會議中心變量的更多信息。 Las variables de session del archivo clase deconecciónlas necesito para rescatar sus valores y trabajarlos – Danilo

+0

@Danilo這是主要的英文網站,但也有其他的,如[Stack Overflow enEspañol](https://es.stackoverflow。 com)如果這是一種更方便的語言供您溝通。 – tadman

回答

1

的SelectCommand.Connection屬性尚未初始化

MySqlCommand.Connection屬性需要可以使用的命令之前進行設置。例外是告訴你它還沒有設置。

您使用,設置它的構造:

using (MySqlCommand command = new MySqlCommand(sql, conexion.con)) 

的邏輯推論是,conexion.con == null。我們發現con設置在conectar。但是,該代碼周圍有一個try/catch塊。因此,在分配con之前,必須拋出異常(並忽略)。

最可能的解釋是,HttpContext.Current.Session["..."]值中的一個(或多個)是null,因此調用.ToString()它拋出一個NullReferenceException

建議:

  1. 不要捕捉和忽略例外;他們經常表示需要正確處理的真正問題。
  2. 會話狀態似乎是一個非常奇怪的地方存儲數據庫憑證;改爲使用web.config設置。 (或者您可能希望剛開始時對它們進行硬編碼以查看是否可以使代碼的其餘部分正常工作,然後在知道其他所有內容都正確時將它們移動到Settings)。
+0

你是對的。在我的情況下,我使用的會話變量可以正常工作,但是我意識到,當我從signalR的HUB文件調用連接文件時,會話變量被刪除,即使我聲明瞭任何會話變量,也不允許它,因爲我得到一個錯誤。我發現由於某種原因,它不允許我使用會話變量 – Danilo

+0

@Danilo如果回答了問題,請接受答案(點擊「打勾」圖標)。 –

+0

我找到了解決方案,會發生什麼情況是在Hub中,它不會與會話變量一起工作,所以我不得不用全局變量替換它,因爲在連接文件中我有會話變量 – Danilo

相關問題