此函数连接到postgres数据库并返回Dataset。
有两件事我想理解
发布于 2017-01-20 07:40:55
我喜欢通用的Result class,它可以重用:
internal class Result
{
internal bool IsFailure => !IsSuccess;
internal bool IsSuccess { get; }
internal string Error { get; }
protected Result(bool isSuccess, string error) {
IsSuccess = isSuccess;
Error = error;
}
private Result(bool isSuccess) : this(isSuccess, null) { }
internal static Result Fail(string error) => new Result(false, error);
internal static Result<T> Fail<T>(string error) =>
new Result<T>(default(T), false, error);
internal static Result Ok() => new Result(true);
internal static Result<T> Ok<T>(T value) => new Result<T>(value, true);
}
internal sealed class Result<T> : Result
{
internal T Value { get; }
internal Result(T value, bool isSuccess) : this(value, isSuccess, null) { }
internal Result(T value, bool isSuccess, string error) : base(isSuccess, error) {
Value = value;
}这不仅可以用于DataSet,也可以用于任何类型。
在您的示例中,返回将是Result<DataSet>,返回可以变成:
returns ds -> new Result.Ok(d)
throw ex -> new Result.Fail<DataSet>(ex.Message)
发布于 2017-01-20 06:49:30
如果您返回null,我认为这将是很好的;如果您需要返回一些定制的消息,也意味着您可以为此使用out参数。因此,如果出现任何异常,则返回值为null --在本例中,out参数将包含异常详细信息。如果数据集填充得很好,就意味着outParameter将有一个“成功”或类似的值。因此,方法签名将更改如下所示
public static DataSet SelectDataSet(string sql, bool isProcedure, out string message, Dictionary<string, object> parameters = null)
{
// Rest of codes here
try
{
message = "Success";
adapter.Fill(ds);
return ds;
}
catch (Exception ex)
{
message = ex.Message;
return null;
}
}你可以这样调用这个方法:
string message = String.Empty;
DataSet resultDataset = SelectDataSet("query here", false, out message);
if (resultDataset != null)
{
Console.WriteLine(message);
// proceed with resultDataset
}
else
{
Console.WriteLine(message);
}在这里,如果出现任何异常,resultDataset将为null,否则您可以继续使用它的值。
发布于 2017-01-20 07:01:52
创建一个类:
class DataSetWithError: DataSet
{
public Exception msg { get; set; }
}查询期间保存错误:
using (OdbcDataAdapter adapter = new OdbcDataAdapter(odbcCommand))
{
DataSetWithError ds = new DataSetWithError();
try
{
adapter.Fill(ds);
}
catch (Exception ex)
{
ds.msg = ex;
}
finally
{
adapter.Close();
}
return ds;
}和结果:
DataSetWithError dataSetWithError = SelectDataSet();
if (dataSetWithError.msg == null)
{
// Show data
}
else
{
MessageBox.Show(dataSetWithError.msg.ToString());
}https://stackoverflow.com/questions/41757502
复制相似问题