使用mySQL和MariaDB在C#中创建表
一周前,我问过,如何用C#程序在MariaDB中创建一个数据库,然后它就工作了 所以,我想,创建一些其他SQL命令并不是那么困难,但它不起作用 代码:我制作了一个构造函数,它在MariaDB中创建了一个数据库,这很有效。所以我创建了一个方法,它应该使用数据库并创建一个包含语句的表。这不管用使用mySQL和MariaDB在C#中创建表,c#,mysql,mariadb,C#,Mysql,Mariadb,一周前,我问过,如何用C#程序在MariaDB中创建一个数据库,然后它就工作了 所以,我想,创建一些其他SQL命令并不是那么困难,但它不起作用 代码:我制作了一个构造函数,它在MariaDB中创建了一个数据库,这很有效。所以我创建了一个方法,它应该使用数据库并创建一个包含语句的表。这不管用 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Thre
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace mySqlCsPrototype3
{
class Program
{
static void Main(string[] args)
{
route rot = new route();
rot.useDBCreateTable();
Console.Read();
}
}
public class route
{
public route()
{
string verbindung = "server=localhost;database=example_bankdb;uid=root;password=";
MySql.Data.MySqlClient.MySqlConnection dbConn = new MySql.Data.MySqlClient.MySqlConnection(verbindung);
MySqlCommand cmd;
string s0;
try
{
dbConn.Open();
s0 = "CREATE DATABASE IF NOT EXISTS `mydb`;";
cmd = new MySqlCommand(s0, dbConn);
cmd.ExecuteNonQuery();
dbConn.Close();
Console.WriteLine("Verbindung wird hergestellt");
}
catch
{
Console.WriteLine("Die Verbindung kann nicht hergestellt werden");
}
}
public void useDBCreateTable()
{
string verbindung = "server=localhost;database=example_bankdb;uid=root;password=";
MySql.Data.MySqlClient.MySqlConnection dbConn = new MySql.Data.MySqlClient.MySqlConnection(verbindung);
MySqlCommand cmd;
string s0;
try
{
dbConn.Open();
s0 = "USE 'mydb'; CREATE TABLE 'user' IF NOT EXISTS('userID' INT AUTO_INCREMENT ,'name' varchar(100) NOT NULL, PRIMARY KEY('userID'));";
cmd = new MySqlCommand(s0, dbConn);
cmd.ExecuteNonQuery();
dbConn.Close();
Console.WriteLine("Verbindung wird hergestellt");
}
catch
{
Console.WriteLine("Die Verbindung kann nicht hergestellt werden");
}
}
}
}
示例代码
所以,我希望你能帮助我
你好,皮劳乔谢谢你的帮助,我发现了错误,我犯了错误。 在C#中,数据库或表的名称必须在这些砖砌中[``]
s0 = "CREATE TABLE IF NOT EXISTS `user`(`userID` INT AUTO_INCREMENT ,`name` varchar(100) NOT NULL, PRIMARY KEY(`userID`));";
感谢您的关注和紧张。“不工作”不是错误消息或问题陈述。如果没有关于问题的任何其他信息,我们无法修复代码中的“不工作”。它怎么不起作用?当你运行代码时会发生什么?我注意到你正在抑制你的异常,所以也许可以先添加一些代码来记录实际的错误消息,而不仅仅是你发明的一个随机短语。它没有抛出错误消息,它无法执行查询,我不知道为什么。“它没有抛出错误消息”…是的,它有。根据您的屏幕截图,它在第二行输出
Die Verbindung kann nicht hergestellt werden
。这意味着它在(useDBCreateTable
方法)中输入了第二个catch
块。事实上,您没有得到实际的异常消息是因为,正如我上面提到的,您故意抑制了真正的异常消息!这是一种反模式,将使您永远无法调试代码。至少您应该编写(catch(Exception ex){Console.WriteLine(“Die Verbindung kann nicht hergestellt werden”);Console.WriteLine(ex.ToString());}
以获取最少的信息。显然,对于实际使用,您应该将数据记录到事件日志或文件中,而不是在屏幕上显示。但出于此目的,它应该更好。还有一件事……您编写了s0=“使用'mydb';创建表'user'
…但就在上面,您编写了string verbindung=”server=localhost;database=example\u bankdb;
…如果您想使用mydb
进行查询,那么为什么不在连接字符串中设置它??string verbindung=“server=localhost;database=mydb;
。查询本身可以是s0=”创建表
…等等。我怀疑您可能遇到的一个问题是,您不能通过ADO.NETTrue一次执行多个语句,但这不仅仅是在C#中。这是标准的MySQL语法。如果您也直接在MySQL中运行它,则会失败。不过,希望至少您现在已经学会了在C#中记录异常:-)注:这些括号被称为“反勾号”