2014-01-24 3 views
0

Это мой стол:Динамическая процедура в C#

ID  ReportID M_ID ColsName  Type  Level Parent ID 
1989 66 349 t169.ID j J  1 0 
1990 66 350 t170.ID j J  1 0 
1991 66 351 t171.ID j J  1 0 
1992 66 352 Linkw2.t170ID j 2 1990 
1993 66 352 Linkw2.t169ID j 2 1989 
1994 66 352 Linkw2.t171ID j 2 1991 

И мой код:

DatabaseObject objData = new DatabaseObject(); 
int ReportID = Convert.ToInt32(Request["ReportsID"]); 

objData.Query = "select DISTINCT R.ReportName,R.ID from Reports R inner join ReportModuleCols RC on R.ID=RC.ReportID where RC.ReportID= " + ReportID + " and R.ID= " + ReportID; 
string ReportName = Convert.ToString(objData.GetSingleValue()); 
string StoredProcedure = ""; 
StoredProcedure += " CREATE PROCEDURE spGet" + ReportName + ReportID + "\n"; 
StoredProcedure += " @Error Varchar(1000) output\n"; 
StoredProcedure += " AS \n"; 
StoredProcedure += " BEGIN \n"; 
StoredProcedure += " BEGIN TRY\n"; 
StoredProcedure += " SELECT "; 

objData.Query = "select ID,ReportID,ReportModuleID,ColsName,Type,ReportLevel,ParentID from ReportModuleCols where Type='d' and ReportID=" + ReportID; 
DataTable Displaytb = objData.GetTable(); 

for (int d = 0; d < Displaytb.Rows.Count; d++) 
    StoredProcedure += Displaytb.Rows[d]["ColsName"] + ","; 

string DisplayParam = StoredProcedure.Remove(StoredProcedure.Length - 1, 1); 
DisplayParam += " FROM \n"; 
objData.Query = "select ID,ReportID,ReportModuleID,ColsName,Type,ReportLevel,ParentID from ReportModuleCols where Type='i' and ReportID=" + ReportID; 
DataTable inputtable = objData.GetTable(); 

for (int t = 0; t < inputtable.Rows.Count; t++) 
{ 
    string table = ""; 
    table = inputtable.Rows[t]["ColsName"].ToString(); 
    table = table.Substring(0, table.IndexOf(".")); 
    DisplayParam += table + ","; 
} 

string SPQuery = DisplayParam.Remove(DisplayParam.Length - 1, 1) + "\n"; 
SPQuery += " WHERE \n"; 

//Here i want to write join query 
SPQuery += " END TRY\n"; 
SPQuery += " BEGIN CATCH\n"; 
SPQuery += " SET @Error = ERROR_NUMBER() + ' ' + ERROR_MESSAGE();\n"; 
SPQuery += " END CATCH\n"; 
SPQuery += " END"; 
objData.Query = SPQuery; 
objData.Execute(); 

У меня есть одна таблица, в которой у меня есть 3 типа, я и d и J

я для входного параметра

d параметр дисплея

и j для параметра join, и я создаю для него динамическую процедуру. Я не знаю, как написать запрос соединения. Пожалуйста, помогите мне.

+3

У вашего вопроса серьезные проблемы с форматированием. Пожалуйста, обновите, чтобы мы могли прочитать его правильно и помочь вам. –

ответ

0

Я сделал это вот так. Он работает ....

DatabaseObject objData = new DatabaseObject(); 
int ReportID = Convert.ToInt32(Request["ReportsID"]); 

objData.Query = " select DISTINCT R.ReportName,R.ID from Reports R inner  
join ReportModuleCols RC on R.ID=RC.ReportID where RC.ReportID= " + ReportID 
     + " and R.ID= " + ReportID; 

string ReportName = Convert.ToString(objData.GetSingleValue()); 

string storedProcedure = ""; 
storedProcedure += " CREATE PROCEDURE spGet" + ReportName + ReportID + "\n"; 
storedProcedure += " @Error Varchar(1000) output\n"; 
storedProcedure += " AS \n"; 
storedProcedure += " BEGIN \n"; 
storedProcedure += " BEGIN TRY\n"; 
storedProcedure += " SELECT "; 

objData.Query = " select ID,ReportID,ReportModuleID,ColsName,Type,ReportLevel,ParentID from ReportModuleCols where Type='d' and ReportID=" + ReportID; 
DataTable Displaytb = objData.GetTable(); 

for (int d = 0; d < Displaytb.Rows.Count; d++) 
{ 
    storedProcedure += Displaytb.Rows[d]["ColsName"] + ","; 
} 

string DisplayParam = storedProcedure.Remove(storedProcedure.Length - 1, 1); 

DisplayParam += " FROM \n"; 

objData.Query = "select ColsName from ReportModuleCols where Type='d' and ReportID=" + ReportID; 

DataTable inputtable = objData.GetTable(); 
string TableColumn = ""; 

for (int t = 0; t < inputtable.Rows.Count; t++) 
{ 
      string table = ""; 
      table = inputtable.Rows[t]["ColsName"].ToString(); 
      table = table.Substring(0, table.IndexOf(".")); 
      TableColumn += table + ","; 
} 

string[] TCols = TableColumn.Split(",".ToCharArray()); 
string[] unique = TCols.Distinct().ToArray(); 

foreach (string TableName in unique) 
{ 
      if (TableName != "") 
      { 
       DisplayParam += TableName + ","; 
      } 
} 

string SPQuery = DisplayParam.Remove(DisplayParam.Length - 1, 1) + "\n"; 

SPQuery += " WHERE \n"; 

objData.Query = " select ID,ReportID,ReportModuleID,ColsName,Type,ReportLevel,ParentID from ReportModuleCols where Type='j' and ParentID=0 and ReportID=" + ReportID; 
DataTable Join = objData.GetTable(); 

for (int t = 0; t < Join.Rows.Count; t++) 
{ 
      objData.Query = " select ColsName from ReportModuleCols where Type='j' and ParentID=" + Convert.ToInt32(Join.Rows[t]["ID"]) + " and ReportID=" + ReportID; 

      string ColJoin = objData.GetSingleValue() + ""; 
      SPQuery += Join.Rows[t]["ColsName"] + "=" + ColJoin + " AND \n"; 
} 

SPQuery += " 1 = 1 \n"; 
SPQuery += " END TRY\n"; 
SPQuery += " BEGIN CATCH\n"; 
SPQuery += " SET @Error = ERROR_NUMBER() + ' ' + ERROR_MESSAGE();\n"; 
SPQuery += " END CATCH\n"; 
SPQuery += " END"; 

objData.Query = SPQuery; 
objData.Execute(); 
Смежные вопросы