我正在尝试使用从MySQL数据库中提取的结果来填充DataTable,但DataTable虽然已初始化但未填充。我想使用此DataTable来填充ListView。以下是我为DataTable设置的内容:
public DataTable SelectCharacters(string loginName)
{
this.Initialise();
string connection = "0.0.0.0";
string query = "SELECT * FROM characters WHERE _SteamName = '" + loginName + "'";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataAdapter returnVal = new MySqlDataAdapter(query,connection);
DataTable dt = new DataTable("CharacterInfo");
returnVal.Fill(dt);
this.CloseConnection();
return dt;
}
else
{
this.CloseConnection();
DataTable dt = new DataTable("CharacterInfo");
return dt;
}
}
为了填充ListView,我得到了:
private void button1_Click(object sender, EventArgs e)
{
string searchCriteria = textBox1.Text;
dt = characterDatabase.SelectCharacters(searchCriteria);
MessageBox.Show(dt.ToString());
listView1.View = View.Details;
ListViewItem iItem;
foreach (DataRow row in dt.Rows)
{
iItem = new ListViewItem();
for (int i = 0; i < row.ItemArray.Length; i++)
{
if (i == 0)
iItem.Text = row.ItemArray[i].ToString();
else
iItem.SubItems.Add(row.ItemArray[i].ToString());
}
listView1.Items.Add(iItem);
}
}
有什么我想念的吗? MessageBox被包含在内,所以我可以看到它是否填充了,没有运气。
感谢您提供任何帮助。
答案 0 :(得分:2)
好吧,我......无法弄清楚你在这里做了什么,所以我会把你的代码粘贴到我正在填充datagridview:
1)连接看起来像这样(如果localhost是你的服务器,否则,服务器机器的IP地址):
string connection = @"server=localhost;uid=root;password=*******;database=*******;port=3306;charset=utf8";
2)查询是可以的(它会返回一些东西),但你不应该像这样构建SQL语句。而是使用参数。请参阅SQL injection。
3)代码:
void SelectAllFrom(string query, DataGridView dgv)
{
_dataTable.Clear();
try
{
_conn = new MySqlConnection(connection);
_conn.Open();
_cmd = new MySqlCommand
{
Connection = _conn,
CommandText = query
};
_cmd.ExecuteNonQuery();
_da = new MySqlDataAdapter(_cmd);
_da.Fill(_dataTable);
_cb = new MySqlCommandBuilder(_da);
dgv.DataSource = _dataTable;
dgv.DataMember = _dataTable.TableName;
dgv.AutoResizeColumns();
_conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (_conn != null) _conn.Close();
}
}
因此,每次我想在mysql数据库中显示表的某些内容时,我都会调用此方法,将查询字符串和datagridview名称传递给该方法。就是这样。
为了您的利益,请将此示例与您的示例进行比较,并了解您可以从两者中使用哪些内容。也许,listview对你来说不是最好的,只是说......
希望这会对你有所帮助。
答案 1 :(得分:2)
检查连接字符串,而不是使用
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataAdapter returnVal = new MySqlDataAdapter(query,connection);
DataTable dt = new DataTable("CharacterInfo");
returnVal.Fill(dt);
this.CloseConnection();
return dt;
你可以使用这个
MySqlCommand cmd = new MySqlCommand(query, connection);
DataTable dt = new DataTable();
dt.load(cmd.ExecuteReader());
return dt;
答案 2 :(得分:0)
调试你的应用程序,看看你的sql语句/连接字符串是否正确并返回一些值,同时验证你的应用程序是否没有抛出任何异常。
答案 3 :(得分:0)
您的连接字符串无效。
设置如下:
connection = "Server=myServer;Database=myDataBase;Uid=myUser;Pwd=myPassword;";
答案 4 :(得分:0)
以下为代码无效的原因。
table
中搜索,试试这个查询 string query = "SELECT * FROM characters WHERE _SteamName LIKE '" + loginName + "%'";
注意LIKE
和%
这有助于列出所有数据。
了解更多详情String Comparison Functions