我正在嘗試連接 MySql 資料庫,但是在執行代碼時它給了我這個錯誤:
無法列印例外字串,因為 Exception.ToString() 失敗
using System;
using MySql.Data.MySqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string connStr = "server=localhost;user=root;database=people;password=slidan4eg";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
string sql = "SELECT name FROM men WHERE id = 2";
MySqlCommand command = new MySqlCommand(sql, conn);
string name = command.ExecuteScalar().ToString();
Console.WriteLine(name);
conn.Close();
}
}
}
UPD:我試圖除錯這個,除錯器說程式壞了conn.Open();,我認為這可能很重要

uj5u.com熱心網友回復:
根據您的螢屏截圖,您有一個System.IO.FileNotFoundException并且缺少System.Security.Permissions程式集。您可以使用 Visual Studio 中的 NuGet-PaketManager 來安裝它。
uj5u.com熱心網友回復:
在ExecuteScalar 的情況下,您將獲得:
null如果游標為空- 如果游標不為空,則為游標第一條記錄的第一個欄位值。
這是怎么回事:
問題出在
string name = command.ExecuteScalar().ToString();
線。如果游標是空的,command.ExecuteScalar()回報null你必須拋出的例外的null.ToString();嘗試
代碼:
在你的情況下,我們可以利用Convert.ToString(),而不是.ToString()它可以處理有null:
static void Main(string[] args) {
string connStr = "...";
//DONE: Dispose IDisposable with a help of using
using (MySqlConnection conn = new MySqlConnection(connStr)) {
conn.Open();
//DONE: let sql query be readable
string sql =
@"SELECT name
FROM men
WHERE id = 2";
using (MySqlCommand command = new MySqlCommand(sql, conn)) {
// if cursor is empty we'll get null which we turn into "Not Found"
string name = Convert.ToString(command.ExecuteScalar()) ?? "Not Found";
Console.WriteLine(name);
}
}
}
另一種可能性是空傳播 ?.運算子。代替
string name = command.ExecuteScalar().ToString();
放
string name = command.ExecuteScalar()?.ToString() ?? "Not found";
uj5u.com熱心網友回復:
您需要先將結果集存盤到一個變數(sql reader 型別)中,然后才能從該變數中一一讀取值。要選擇第一條記錄,您可以遵循以下技術:
using System;
using MySql.Data.MySqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string connStr = "server=localhost;user=root;database=people;password=slidan4eg";
string name = "";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
string sql = "SELECT name FROM men WHERE id = 2";
MySqlCommand command = new MySqlCommand(sql, conn);
var dr = command.ExecuteReader();
if (dr.HasRows)
{
dr.Read(); // Read first record.
name = dr.GetString(0); // Get value of name
}
dr.Close();
conn.Close();
Console.WriteLine(name);
}
}
}
uj5u.com熱心網友回復:
您不能鏈接要直接從ExecuteReader()方法讀取的資料。您可以按如下方式讀取作為查詢結果回傳的資料。
SqlDataReader reader = command.ExecuteReader();
string name;
while (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader[0])); /* first column: id */
Console.WriteLine(String.Format("{0}", reader[1])); /* second column: name */
/* First Method */
name = reader["name"].ToString();
/* Second Method */
name = reader[1].ToString();
}
參考
- SqlCommand.ExecuteReader
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397714.html
上一篇:如何在SQL(PostgreSQL/pgAdmin4)中執行WHILELOOP?
下一篇:狀態更改的兩個日期之間的間隔
