2
我有兩個列的表 - [security_role_name]和security_role_cd。 security_role_cd的數據類型在Security_Role表中是smallint。數據類型而變化基於數據在表
我有以下數據的選擇邏輯。返回的數據類型變化的基礎數據的場景: -
- 表無數據
- 一個記錄出現在表
問題
- 爲什麼數據類型不同在這些情況下
- 如何糾正
注意:目前我使用try..catch
滿足這種情況下
CODE
private int GetNextRoleID(SqlConnection connection)
{
int? newRoleID = null;
//string commandText = "SELECT (MAX(security_role_cd)) AS [NewRoleID] FROM Security_Role ";
string commandText = "SELECT TOP 1 security_role_cd AS [NewRoleID] FROM Security_Role ORDER BY security_role_cd DESC";
SqlCommand command = new SqlCommand(commandText, connection);
command.CommandType = System.Data.CommandType.Text;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
//newRoleID = Convert.ToInt32((reader.GetInt16(0)) + 1);
try
{
newRoleID = Convert.ToInt32(reader.GetInt16(0)) + 1;
}
catch
{
int result = (reader.GetInt32(0));
newRoleID = result + 1;
}
}
}
}
reader.Close();
if (newRoleID == null)
{
newRoleID = 1;
}
return (Convert.ToInt32(newRoleID));
}
參考:
感謝。以下也值得使用? SqlDbType type =(SqlDbType)(int)reader.GetSchemaTable()。Rows [0] [「ProviderType」]; – Lijo
@Lijo增加了很多開銷......讀者已經知道這些類型......只是詢問讀者類型是什麼,IMO。 –
能否請您詳細說明這個問題的原因(問題的第一部分)?這將有助於使這個答案更有用。 – Lijo