我正在寫一個代碼生成和我被陷在確定一個存儲過程的結果集列的可空狀態的存儲過程結果的列可以爲空。我可以查詢的數據類型就好了,但無論是DataReader對象,也不是數據表列包含我的專欄的正確空值。我怎樣才能確定是否
public List<DataColumn> GetColumnInfoFromStoredProcResult(string schema, string storedProcName)
{
//build sql text
var sb = new StringBuilder();
sb.Append("SET FMTONLY OFF; SET FMTONLY ON; \n");//this is how EF4.1 did so I copied..not sure why the repeat
sb.Append(String.Format("exec {0}.{1} ", schema, storedProcName));
var prms = GetStoredProcedureParameters(schema: schema, sprocName: storedProcName);
var count = 1;
foreach (var param in prms)
{
sb.Append(String.Format("{0}=null", param.Name));
if (count < prms.Count)
{
sb.Append(", ");
}
count++;
}
sb.Append("\n SET FMTONLY OFF; SET FMTONLY OFF;");
var dataTable = new DataTable();
//var list = new List<DataColumn>();
using (var sqlConnection = this.SqlConnection)
{
using (var sqlAdapter = new SqlDataAdapter(sb.ToString(), sqlConnection))
{
if (sqlConnection.State != ConnectionState.Open) sqlConnection.Open();
sqlAdapter.SelectCommand.ExecuteReader(CommandBehavior.KeyInfo);
sqlConnection.Close();
sqlAdapter.Fill(dataTable);
}
//using (var sqlCommand = new SqlCommand())
//{
// sqlCommand.CommandText = sb.ToString();
// sqlCommand.CommandType = CommandType.Text;
// sqlCommand.Connection = sqlConnection;
// if (sqlConnection.State != ConnectionState.Open) sqlConnection.Open();
// var dr = sqlCommand.ExecuteReader(CommandBehavior.SchemaOnly);
// var whateva = dr.GetSchemaTable();
// foreach (DataColumn col in whateva.Columns)
// {
// list.Add(col);
// }
//}
}
var list = dataTable.Columns.Cast<DataColumn>().ToList();
return list;
}
我試圖從一個存儲過程類似於在實體框架創建一個複雜類型的東西結束。我可以劫持該功能嗎?
在這個例子中,ID列.. tblJobId(不是我個人的稱呼)將不能爲空。但我選擇null作爲ImNull,它具有所有的相同屬性那麼,如何EF確定相應的C#數據類型應可以爲空還是不可以?
有沒有人做過這個..
想法是讚賞。
*我試圖從一個存儲過程類似於在實體框架創建一個複雜類型的東西結束。我可以劫持該功能嗎? - 是的,使用實體框架。 – 2012-01-31 05:25:13
此代碼生成器爲企業數據訪問塊創建存儲過程調用。我使用Linq到EDMX來爲實體生成中間層和自動導入sprocs。好東西,但我只是想確定列是否爲空或不那麼我可以創建存儲過程的結果屬性和對象的一部分。 EF竟然是我的表計太慢了,我厭倦了等待的「嚮導」,甚至更新整個EDMX時,我只更新一個存儲過程。 – TheDev6 2012-01-31 05:34:03
您可以依靠標準的SMO呼叫。我用'StoredProcedureParameter.DefaultValue'參數取得了一些成功。 – 2012-01-31 05:41:05