
如果是某个值的长度
select length(字段名) from 表名如果是表中这个字段的长度
select data_length from user_tab_columns where table_name='表名' and cloumn_name='字段名'其中后一条语句表名和字段名需要大写
你好哦:
遇到问题的时候千万别怕哦,看清错误再说:
unsupported encoding gbk for result set cloumn 这句话的意思是不支持编码为GBK的数据作为参数,也就是说db数据库是不支持这种编码格式的,那么问题来了,什么格式才是受支持的呢,当然国际比较通用的当然就是utf-8,所以说,在你的编译工具的属性设置中,将gbk编码格式改为utf-8一切都会解决。
最后祝你学业有成 ,望采纳谢谢!
思路很简单,就是先依次获取Excel中表的表名,然后再将Excel表的数据导入到内存以DataTable格式存在,最后再把dataTable数据导入到Mdb数据库文件中。最后实现的功能可以使Excel多表进行导入,如果Mdb数据库文件中已有新建的表, *** 作是先删除数据库中的已存在表,再重新创建表,导数据。
源码:
using System;using SystemCollectionsGeneric;using SystemComponentModel;using SystemData;using SystemDrawing;using SystemLinq;using SystemText;using SystemThreadingTasks;using SystemWindowsForms;using SystemDataOleDb;
namespace TestK
{
public partial class Form1 : Form {
public Form1()
{
InitializeComponent();
}
public int tableNameNum = 0; //记录Excel中所有表的数量 public OleDbConnection connection = new OleDbConnection("Provider=MicrosoftJetOLEDB40;Data Source=C:\\Users\\CES\\Desktop\\CESmdb");
//建立与数据库文件CESmdb的连接
//打开以xls或者xlsx结尾的文件 private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog(); //创建窗体 dlgFilter = "Excel文件 (xls;xlsx)|xls;xlsx"; //浏览过滤出以xls或者xlsx结尾的文件 if(dlgShowDialog() == DialogResultOK)
{
string filePath = dlgFileName; //获取打开文件的路径 thistextBox1Text = filePath;
}
}
//获取Excel中所有表的表名 public string[] GetTableName(string excelFilename)
{
//建立与指定Excel文件的连接 string connectionString = stringFormat("Provider=MicrosoftACEOLEDB120;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=Excel 80;Persist Security Info=False", excelFilename);
string[] tableName = new string[20]; //存储Excel中所有表的表名 string temp; //中间变量
using (SystemDataOleDbOleDbConnection connection = new SystemDataOleDbOleDbConnection(connectionString))
{
connectionOpen();
//获取数据库架构信息,包括列、主键、表等信息 DataTable table = connectionGetOleDbSchemaTable(SystemDataOleDbOleDbSchemaGuidTables, null);
for (int i = 0; i < tableRowsCount;i++ )
{
temp = tableRows[i]["Table_Name"]ToString(); //获取Excel中的表名 tableName[i] = tempReplace("$", ""); //因为获取的表名最后会有$符号,所以要替换 }
tableNameNum = tableRowsCount;
connectionClose();
}
return tableName;
}
//获取Excel中每张表的数据,以datatable类型返回 public DataTable GetExcelTable(string excelFilename,string tableName)
{
//建立与指定Excel文件的连接 string connectionString = stringFormat("Provider=MicrosoftACEOLEDB120;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=Excel 80;Persist Security Info=False", excelFilename);
DataSet ds = new DataSet(); //数据集 //using中声明的对象connection,在using语句块结束后会自动释放 using (SystemDataOleDbOleDbConnection connection = new SystemDataOleDbOleDbConnection(connectionString))
{
connectionOpen();
//获取数据库架构信息,包括列、主键、表等信息 DataTable table = connectionGetOleDbSchemaTable(SystemDataOleDbOleDbSchemaGuidTables, null);
string strExcel = "select from " + "[" + tableName + "$]";
//打开数据链接,得到一个数据集 OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, connectionString);
//在数据集中查询表名为tableName的表,然后把其数据在装入数据集ds中 adapterFill(ds, tableName);
connectionClose();
}
return dsTables[tableName];//以datatable类型返回数据集ds中表名为tableName的表 }
//判断在数据库中,指定表名的表是否存在 public bool TableExists(string table)
{
bool rythm;
connectionOpen();
//读取表名为table的表的行数信息 rythm = connectionGetSchema("Tables", new string[4] { null, null, table, "TABLE" })RowsCount > 0;
connectionClose();
return rythm;
}
//如果在建表之前,数据库已经存在该表,那么首先要先删除此表 public void DeleteTable(string tableName)
{
string sql = "drop table "+tableName+";";
connectionOpen();
OleDbCommand cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
connectionClose();
}
//中间类型为dataTable的表数据转换到数据库mdb文件中 public bool dataTableToMdb(string excelPath,string tableName)
{
//获取Excel中表的数据 DataTable dt = GetExcelTable(excelPath,tableName);
//表中数据大于等于两行,数据转入格式才是正确的 if (dtRowsCount >= 2)
{
string[] cloumnName = new string[50];
//获取Excel中表的所有列名 for (int i = 0; i < dtColumnsCount; i++)
{
cloumnName[i] = dtRows[0][i]ToString();
}
//在mdb数据库文件中创建表 string sql = "create table " + tableName + " (" + cloumnName[0] + " varchar null)";
connectionOpen();
OleDbCommand cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
//在mdb数据库文件中,给已创建好的表添加好所有列 for (int i = 1; i < dtColumnsCount; i++)
{
sql = "alter table " + tableName + " add " + cloumnName[i] + " varchar null";
cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
}
//在mdb数据库文件中,给已创建好的表加入数据 for (int t = 1; t < dtRowsCount; t++)
{
sql = "insert into " + tableName + " values('";
for (int k = 0; k < dtColumnsCount; k++)
{
if (k != dtColumnsCount - 1)
{
sql = sql + dtRows[t][k]ToString() + "','";
}
else {
sql = sql + dtRows[t][k]ToString() + "')";
}
}
cmd = new OleDbCommand(sql, connection);
cmdExecuteNonQuery();
}
connectionClose();
return true;
}
else {
MessageBoxShow("Excel中"+ tableName +"表的原始数据格式不正确!");
}
return false;
}
private void button2_Click(object sender, EventArgs e)
{
int flag = 1; //判断由Excel表导入到Mdb是否成功的标记变量
工资表基本列如下: 代码 姓名 工作时间 基础工资 浮动工资 岗位工资 知识分子补贴 其它工资
code name workdata basesa movesa stationsa bt othersa
char varchar char decimal decimal decimal decimal deciaml
在PB中有两种方式可控制列属性,一是静态方式,另一种是动态方式实现。所谓静态方式就是在列的属性上通过选项实现。所谓动态方式就是利用编程实现。现分别给予介绍:一、静态方法 (1)在DataWindow中选中某列后点MOUSE右键,选“properities”后系统d出一标签,选中“Edit”标签,将“Display Only”选项制为有较;
(2)或者选中“Expression”标签,在“Protect Express”中填入“1”;
(3)或者选中“Expression”标签,在“Protect Express”中填入条件表达式,如工作时间不满一年的人员不能修改,则写入“if (daysafter(date(workdate),today()) <= 365,1,0)”;
(4)在DataWindow中,将某列的Tab Order 值制为0,则该列因得不到焦点而不能被修改;
(5)在DataWindow Painter 状态下选取Rows菜单,再选取Update Properties,d出Specify Update Properties对话框,将Allow Updates 设为空。 二、动态修改方法 (1)将整个DataWindow设置为保护方式:利用DataWindow Object的ReadOnly 属性可以将整个DataWindow 设置为保护方式。 语法为:dw_1ObjectDataWindowReadOnly=value 或 dw_1Modify(“DataWindowReadOnly”)其中:value表示DataWindow是否为只读(read-only)状态,它有两个取值:Yes 和No。Yes表示使DataWindow为read-only;No 则相反,默认值是No。例如:如果要使DataWindow设置为保护方式,可以在相应事件的脚本中包含下列代码:dw_1Modify(“DataWindowReadOnly=Yes”) 或者为:
dw_1ObjectDataWindowReadOnly=Yes (2)只保护DataWindow的某些列 方法一:利用列的Protect属性 语法为:dw_1ObjectnameProtect=integer 或 dw_1Modify(“columnnameProtect”)。
参数说明:cloumnname:为要保护的列名;integer:为该列的保护状态,值为0或False时该列不受保护;值为1或True时该列受到保护。例如,要将列name设置为保护状态,则相应的代码为:dw_1ObjectnameProtect=1 或者为:dw_1Moidfy(“nameProtect=1”) 方法二:利用列的TabSequence属性,在程序执行时可以根据需要将该列的TabOrder置为0,从而达到保护的目的。语法为:dw_1ObjectnameTabSequence= number或dw_1Modify(“columnnameTabSequence”)
参数说明:columnname:要保护的列名;number:该列的TabOrder值(0-32000)。
例如,要将列name设置为保护状态,相应的代码为:
dw_1ObjectnameTabSequence=0
或者:dw_1Modify(“nameTabsequence=0”) 方法三:利用修改列的EDIT属性中的DisplayOnly属性值。 语法为:dw_1ObjectcolumnnameEditDisplayOnly=value 或 dw_1Modify(“columnnameEditDisplayOnly”)
参数说明:columnname:要保护的列名;
value:表示该列是否为只显示(DisplayOnly)状态,它有两个取值:Yes和No。Yes表示不允许用户输入数据(只显示):No则相反,默认值是No。
例如:如果要使列name设置为只显示,可以在相应事件的脚本中包含下列代码:
dw_1ObjectnameEditDisplayOnly=Yes
或者:dw_1Modify(“nameEditDisplayOnly=Yes”) 用该方法时列虽不能被修改,但该列能得到焦点,上述的其它方法则不能。 三、有选择的保护某些行上述方法将对DataWindow的所有行起作用,但要想只保护其中的某些行,则需要用列的保护(Protect)属性(取值同上述方法二),但这是在建立DataWindow时实现的。方法为:在DataWindow画板(Painter)中,双击相应的列,d出Column Object 对话框,选取Expressions页,在Protect后的框中写入if(条件表达式,1,0)。灵活运用条件表达式可以获得多种保护效果。(1)只允许修改新插入的行 在一个DataWindow中,有时会有这样的需要:已有的数据只能浏览不允许修改,只有用户新输入的数据才允许修改,此时表达式为: if(isrownew(),0,1),或者if(not isrownew(),1,0) (2)某一列的保护情况要根据其它列的数据进行 如在员工工资管理中,只有工作年限大于5年时才允许输入知识分子补贴(bt),则列bt的Protect后的框中输入:if(integer(mid(string(today(),’yyyymmdd’),1,4)) – integer(mid(workdata,1,4))>5,0,1) (3)要保护的行只有在执行时才能确定,并且不断变化例如在员工工资管理中,假设工资的修改只有该工资的输入者是变化的,且一般情况下只有在执行时才能确定条件需要一个变量,这就需要在建立DataWindow时为其指定一个检索数据的参数(如flag),然后在可修改列的Protect后的框中输入(user_name是该DataWindow中的一列,代表输入者的名称):
if (user_name=flag,0,1) 在实际应用时还要注意参数的实际类型。 (4)在表中增加一个标志列 上述方法基本上均要求要保护的行有一定的规律可循,当这些行没有规律时,可以在相应的表中专门增加一个标志列(设列名为flag),取值为1和0,然后在其它列的Protect后的框中直接输入flag的表达式。运行时若该行的flag=1,在该行相应的列处于保护状态。对于标志列值的修改,可以由数据管理员修改或根据某种情况在程序中灵活设置。
F
判断长度一般用于字符型字段
如果是某个值的长度
select length(字段名) from 表名如果是表中这个字段的长度
select data_length from user_tab_columns where table_name='表名' and cloumn_name='字段名'其中后一条语句表名和字段名需要大写
以上就是关于Oracle SQL如何判断一个字段值的长度全部的内容,包括:Oracle SQL如何判断一个字段值的长度、java 查询db2数据报错 com.ibm.db2.jcc.b.sqlexception:unsupported encoding gbk for result set cloumn、excel格式文件怎么导入至mdb文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)