为啥我将主键设置为文本(字符串)时无法检索数据

Posted

技术标签:

【中文标题】为啥我将主键设置为文本(字符串)时无法检索数据【英文标题】:why can't i retrieve data when i set primary key as text (string)为什么我将主键设置为文本(字符串)时无法检索数据 【发布时间】:2013-04-04 07:01:35 【问题描述】:
namespace primarykeycheck

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        
        OleDbConnection myConn;
        OleDbCommand myComm;
        string queryString;


        public void connectDB()
        
             myConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\rummykhan\MCS\Spring 2013\Object Oriented Programming\My Apps\Testing\Database Apps\string as Primary key\primarykeycheck\db.accdb");
        
        public string fetchName(string ID)
        
           string Name;
           queryString = "select dbName from mydb where dbID =" + ID;
           myComm = new OleDbCommand(queryString, myConn);
           myConn.Open();
           Name = (string)(myComm.ExecuteScalar()).ToString();
           myConn.Close();
           return Name;
        
        private void btn_fetch_Click(object sender, EventArgs e)
        
           connectDB();
           txtName.Text = fetchName(txtID.Text);
        

当 id 数据类型为字符串时,我正在努力获取名称,bt 我面临这个问题“标准表达式中的数据类型不匹配” 我也试过 名称 = (string)myComm.ExecuteScalar();

【问题讨论】:

【参考方案1】:

你的陈述

queryString = "select dbName from mydb where dbID =" + ID;

有两个问题:

    它不会在 SQL 命令中的 ID 值周围加上引号。

    它正在尝试使用旧的和非常不赞成的方式来构建 SQL 命令。您确实应该调查“参数化查询”(在 Stack Overflow 上有 很多 示例)并熟悉 OleDbCommand 对象的 .Parameters 属性(参考:here)。

【讨论】:

以上是关于为啥我将主键设置为文本(字符串)时无法检索数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写

当主键为 varchar 时,无法从 Laravel 的 Eloquent 中检索列值

为啥当我将数字添加到字符串时,它会在 C++ 中显示随机文本?

MySQL:为啥将主键与不​​使用索引的随机生成的数字进行比较?

是否可以将主键设置为 DEFERRABLE?

“[__NSArrayM objectForKey:]:无法识别的选择器”尝试从字典中检索字符串时