我有一个简单的原始应用程序,我想像他们所说的那样优雅地处理错误。
我只是没有尝试去捕获。在上学C#之前,我开始学习一些python,但实际上并不能完全一样。这是我的代码,
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Threading.Tasks;
namespace Crud
{
class Program
{
static string conn_string = "Data Source=MY_SQLSERVER;Initial Catalog=A_DATABASE";
private static void Create(string name, string email)
{
using (SqlConnection conn = new SqlConnection(conn_string))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"INSERT INTO dbo.Person (name, email)
VALUES (@name, @email)";
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@email", email);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
private static void Read()
{
using (SqlConnection conn = new SqlConnection(conn_string))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT id, name, email FROM dbo.Person ORDER BY id";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
Console.WriteLine("{0}\t{1}\t{2}", dr.GetInt32(0), dr.GetString(1), dr.GetString(2));
}
conn.Close();
}
}
private static void Update(int id, string name, string email)
{
using (SqlConnection conn = new SqlConnection(conn_string))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"UPDATE dbo.Person SET name=@name, email=@email
WHERE id = @id";
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@email", email);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
private static void Delete(int id)
{
using (SqlConnection conn = new SqlConnection(conn_string))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"DELETE FROM dbo.Person WHERE id=@id";
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
static void Main(string[] args)
{
Console.WriteLine("Please Enter a Command (Create, Read, Update or Delete)");
string input = Console.ReadLine();
if (input == "Read" || input == "read")
{
Read();
Console.WriteLine("");
}
else if (input == "Create" || input == "create")
{
Console.WriteLine("Enter a name");
string name = Console.ReadLine();
Console.WriteLine("Enter an email address");
string email = Console.ReadLine();
Create(name, email);
// Assuming Create has not yet returned an error, everything successful
Console.WriteLine("Entry Created Successfully!");
}
else if (input == "Update" || input == "update")
{
int id;
bool check;
do
{
Console.WriteLine("What id would you like to change?");
string val = Console.ReadLine();
check = int.TryParse(val, out id);
} while (!check);
Console.WriteLine("Enter a name");
string name = Console.ReadLine();
Console.WriteLine("Enter an email address");
string email = Console.ReadLine();
Update(id, name, email);
Console.WriteLine("Entry Updated Successfully!");
}
else if (input == "Delete" || input == "delete")
{
int id;
bool check;
do
{
Console.WriteLine("What id would you like to delete?");
string val = Console.ReadLine();
check = int.TryParse(val, out id);
} while (!check);
Delete(id);
Console.WriteLine("Entry Deleted Successfully :(");
}
}
}
}
它可以工作,但是很脆弱。这是一个控制台应用程序,有一天我将变成一个html解决方案,但是...
我不确定在哪里放置try catch块,也不知道在哪里放置异常。然后我在msdn上,他们告诉我他们最后使用了。最后,我能理解的东西。因此,来自python我会说尝试显然是相同的,c Sharp中的
catch (){}
就像python中的except:
一样,但是我没有在python中使用参数。我真是个菜鸟。我认为我可以在.NET中使用Exception对象,但是我不需要它。我只是想写一条自定义消息,如果发生任何错误...我的意思是,写href有多难?我只是无法使其正常工作。所以我的问题是,考虑到我想将try catch块保留在每个crud操作中,我将如何构造
Create
方法?
最佳答案
基本的C#异常处理:
try
{
//do stuff
}
catch
{
//write custom exception message
}
finally
{
//this is not necessary, but would be here
}
catch
块将捕获以上示例中的所有异常。如果您想做一些异常(exception)处理,可以执行以下操作:catch (Exception e)
{
//do something with e
}
在您的情况下,它看起来像:
private static void Create(string name, string email)
{
try
{
using (SqlConnection conn = new SqlConnection(conn_string))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"INSERT INTO dbo.Person (name, email)
VALUES (@name, @email)";
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@email", email);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
catch
{
//print custom error message
}
}
关于c# - 错误和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187432/