您有幾個選擇來自Microsoft:ADO.NET或Linq2Sql是當前流行的。但是,您提到的鏈接,將生成SQL轉換爲ORM需要花費大量的工作量。
爲了使SQL的創建更直接更安全,您應該考慮使用SQL參數。以下是一個示例:
using (SqlCommand saveCommand = DbUtil.CreateSqlCommand(context.Transaction)) {
saveCommand.CommandText =
"INSERT INTO Hit (" +
"Id, PersonId, TeamId, PlayerId" +
") VALUES (" +
"@Id, @PersonId, @TeamId, @PlayerId" +
")";
DbUtil.AddParameter(saveCommand, "@Id", SqlDbType.UniqueIdentifier, Guid.NewGuid());
DbUtil.AddParameter(saveCommand, "@PersonId", SqlDbType.UniqueIdentifier, hit.PersonId);
DbUtil.AddParameter(saveCommand, "@TeamId", SqlDbType.UniqueIdentifier, hit.TeamId);
DbUtil.AddParameter(saveCommand, "@PlayerId", SqlDbType.UniqueIdentifier, hit.PlayerId);
saveCommand.ExecuteNonQuery();
}
這會將您的參數列表從SQL中分離出來。而且我們的SQL更清晰易讀。這個例子中的DbUtil只是一個幫助函數,我通過連接或事務創建了我的sql命令。也類似於你的sqlh.addValue,我有一個DbUtil.AddParameter,它通過接受命令,變量名,數據類型和值來工作。這裏有一個包含重載方法的示例:
internal static SqlParameter CreateSqlParameter(
string parameterName,
SqlDbType dbType,
ParameterDirection direction,
object value
) {
SqlParameter parameter = new SqlParameter(parameterName, dbType);
if (value == null) {
value = DBNull.Value;
}
parameter.Value = value;
parameter.Direction = direction;
return parameter;
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType
) {
return AddParameter(sqlCommand, parameterName, dbType, null);
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType,
object value
) {
return AddParameter(sqlCommand, parameterName, dbType, ParameterDirection.Input, value);
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType,
ParameterDirection direction,
object value
) {
SqlParameter parameter = CreateSqlParameter(parameterName, dbType, direction, value);
sqlCommand.Parameters.Add(parameter);
return parameter;
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType,
ParameterDirection direction
) {
SqlParameter parameter = CreateSqlParameter(parameterName, dbType, direction, null);
sqlCommand.Parameters.Add(parameter);
return parameter;
}
getInsertValues()是做什麼的? – AnthonyWJones 2009-01-23 16:46:08
getInsertFields()=>「[name],[address],[created]」 getInsertValues()=>''Bill','123 Street',getDate()「 – Bill 2009-01-23 16:57:11